解決したいこと
Dockerを使った環境で、初めてLaravelアプリケーションの画像投稿を実装しています。
保存はできたのですが、シンボリックリンクを使った表示ができません。
お力添えいただきたいです。
環境
MacOS Catalina 10.15.7
PHP 7.3.11
Laravel Framework 8.37.0
Docker 20.10.5
MySQL 8.0
発生している問題・エラー
エラーは発生しておらす、alt属性が表示されます。
ソースコード
コントローラ
php
1 2//トップページで投稿内容を表示します 3public function index() 4 { 5 $userId = Auth::id(); 6 $items = Post::where('user_id',$userId)->get(); 7 return view("posts.index",compact('items')); 8 } 9 10//投稿の処理です 11public function create(Request $request) 12 { 13 // Validate 14 $this->validate($request, Post::$rules); 15 16 $post = new Post; 17 18 // Insert data. 19 $post->title = $request->title; 20 $post->content = $request->content; 21 $post->user_id = $request->user()->id; 22 23 // Check if the file exists. 24 $fileData = $request->file('file'); 25 if($fileData->isValid()) { 26 // Insert file name 27 $post->file_name = $fileData->getClientOriginalName(); 28 29 // Save file and insert the saved file path 30 $filePath = $fileData->store('public/temp'); 31 $post->file_path = str_replace('public/', '', $filePath); 32 } 33 34 // Save and return to home page 35 $post->save(); 36 return redirect('/'); 37 }
ビュー
html
1@foreach ($items as $item) 2 <li> 3 <img src="{{ asset('storage/'.$item->file_path) }}" alt="こっちが表示されます"> 4 </li> 5@endforeach
Web上でのパス
html
1<img src="http://localhost:10080/storage/temp/xxxxx.png">
ls -la
を実行
lrwxr-xr-x <省略> storage ->/workspace/backend/storage/app/public
php artisan storage:link
を実行したディレクトリ構造
public L images L storage L temp L xxxxx.png
データベース
保存されているファイルパス(データベースのfile_pathカラムのデータ)
temp/xxxxx.png
マイグレーションファイル
$table->string('file_path');
自分で試したこと
ファイルのパスが不正であると仮定し、以下を確認しました。
http://localhost:10080/storage/temp/xxxxx.png
にアクセスしても、404が返ってきます。
<img src="storage/temp/xxxxx.png">
で設定しても表示されません。
public/images
内の画像ファイルは通常通り表示されます。
お力添え願います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。