Laravelでpublic linkにしたら画像が表示されない時の解決法

Laravel・PHP豆知識・トラブル対策

LaravelでPublic Linkにしたら画像が表示されないときの原因と解決法です。

次のように、画像が表示されていないとします。

このときのコードは下記のとおり。

画像以外の箇所はちゃんと表示されています。

原因を究明するため、画像箇所を右クリックし、別ウィンドゥで開いてみます。

URLから、どのパスを読み込んでいるかが確認できます。

どうやら imagesフォルダの前に【posts】がついてしまっています。

解決法① asset関数を使ってpublicフォルダを読み込ませる

このいらないフォルダ名【posts】をパスから削除したい!

そこで、 asset関数を使います。

asset関数を使うことで、publicフォルダを直接読み込ませることができます。

解決法② 画像フォルダが入っているフォルダ名をいれる

解決法①で解決したなら良いのですが、やっぱり画像が読み込まれない場合は、この先をお読みください。

public/storageをチェックして、画像がどのフォルダに入っているかチェックしてください。

たとえば、次のように【public/storage/images】と入っているとします。

次に、読み込めないときの画像のパスを確認します。

下記のように【ローカルホスト/images/画像ファイル名】なっているとします。

【images】の前に【storage】をいれれば、画像が表示されそうなことが分かります。

そこで、コードを書きのように書き換えます。

これで、表示されました。

解決法③ もっとスマートにコードを書きたい場合はアクセサを使う

解決法②で解決したものの「毎回 asset だの、ディレクトリ名を書くのは面倒」という場合、Laravelのアクセサを使えば解決します。

アクセサは、オリジナルのカラム名を加工してくれる機能。

指輪やネックレスといったアクセサリーのように、データをキレイに修飾してくれるイメージですね。

先ほどのコードをアクセサを使って、シンプルにしていきます。

アクセサを使ってコードをシンプルに

モデルファイルに下記を追加します。

これで、きちんとパスが入るようになります。

ビューのコードは下記のようにシンプルなものに書き換えます。

まとめ

画像が表示されないときは、ブラウザ上のパスをチェックしてみてください。

なおpublicフォルダの下に何かを置いたら、リンクを貼るときは、asset関数を忘れないようにしましょう。

じゅんこ
じゅんこ

私はよく忘れちゃいますが・・・

毎回面倒なパスを入れるのが面倒な場合や、私のように忘れてしまう人は、アクセサを使いましょう。

ビューファイルに毎回assetを入力する手間が省けますよ。

コメント

タイトルとURLをコピーしました