Laravel 8.x Jetstreamのプロフィール画像が表示されない


概要

Laravel 8.xがリリースされ少し経過しましたが、やる事が溜まっていた為8.xに手が出せませんでした。そこで最近やっと触れる時間が確保できたのでLaravel 8.xと新パッケージのLaravel Jetstreamを触れる機会ができました。

プロフィール画像が表示されない...

Jetstreamでは標準で自分のアカウントのプロフィール画像を設定する事ができます。まだコードを何も書いてないのにこのレベルまで実装されてるなんてすごい、、

しかし、マイページからプロフィール画像となる画像を選択し保存をしてみたのですが表示されません。なぜだ。。。

Google先生に聞いてみる

何が原因か見ているとおそらく画像のパスが適切でない事が判明。では、何か同じ問題が起きてる人がいるかも!と思いGoogle先生に聞いてみることにしました。

Laravel 8.x 画像が表示されない - teratail

あった。やはり同じ問題を抱えている方がいたようです。

解決方法

どの様にJetstreamが表示しているかというのは上記のリンクの回答がとても参考になるかと思います。


Jetstream標準のコードにある記述の様に.envファイルを直接参照するというのはキャッシュ対象ですし個人的にあまり好きではありません。そこでデプロイ先やAPP_URLで適時変える必要のないように以下のように取得してみました。

config/filesystems.php

-           'url' => env('APP_URL').'/storage',
+           'url' => url('').'/storage',
            'visibility' => 'public',
        ],

(この方法が悪手だった際はご指摘していただけると幸いです!)

まとめ

今回Jetstreamのコードを読み解いていくと積極的にコンポーネントを使っている様でなかなか原因のコードがどれなのか掴めなかったですが、結果的に1つのファイルを編集することにより、他のファイルに干渉することなく編集することができたので個人的にもコンポーネント化してみようと思いました。