環境
PHP 7.4.2
Laravel 6.16.0
composer 1.9.2
macOS Catalina 10.15.3
解決したいこと
ユーザー側で投稿した画像を、Laravel-adminで作った管理画面でも表示できるようにしたいです。
状況
laravelで掲示板を作っています。画像の表示で数日詰まっています。
・ユーザー側での投稿は、タイトル、本文、投稿日時などは、管理画面でも表示される。
・管理画面で投稿した画像は、ユーザー側でも表示される。
・シンボリックリンクは張っている。
・ユーザー側と管理側で、投稿した画像は同じフォルダに保存されている。('storage/app/public'内)
・画像を添付したユーザー側での投稿を、管理画面でデベロッパーツールで確認すると、img src="/storage//storage/..."
となっていて、冒頭をimg src="/storage/..."
に修正すると、管理画面でも画像が表示されるようになる。
・デベロッパーツール上でのみ、404 Not Found
のエラー文が表示される。
最後に書いたものから、img src="/storage/..."
がデフォルトになるように設定すればいいかと思うのですが、admin.phpのdiskや、filesystems.phpのrootやurlをいじったり、Controllerの$path周辺をいじったりしましたが解消されず、困っています。
以下、関連のありそうなコードと、参考にしたサイトを記載します。
何かヒントやアドバイスをいただけると有り難いです。よろしくお願いします。
コード
PostController
1public function store(PostRequest $request) 2 { 3 4 $image = $request->file('files'); 5 6 if($request->hasFile('files') && $image->isValid()){ 7 $file_name = $image->getClientOriginalName(); 8 $path = $image->storeAs('public', $file_name, ['disk' => 'local']); 9 $path = Storage::url($path); 10 }else{ 11 $path = null; 12 } 13 14 $post = new Post; 15 $post->user_id = $request->user_id; 16 $post->title = $request->title; 17 $post->content = $request->content; 18 $post->image = $path; 19 20 $post->save(); 21 22 return redirect()->route('posts.index')->with('status', '新しく投稿しました。'); 23 }
AdminPostController
1protected function grid() 2 { 3 $grid = new Grid(new Post()); 4 5 $grid->column('id', __('Id')); 6 $grid->column('user_id', __('User id'))->sortable(); 7 $grid->column('title', __('Title')); 8 $grid->column('content', __('Content')); 9 $grid->column('image', __('Image'))->image(); 10 $grid->column('created_at', __('Created at'))->sortable(); 11 $grid->column('updated_at', __('Updated at')); 12 13 return $grid; 14 } 15 16 /** 17 * Make a show builder. 18 * 19 * @param mixed $id 20 * @return Show 21 */ 22 protected function detail($id) 23 { 24 $show = new Show(Post::findOrFail($id)); 25 26 $show->field('id', __('Id')); 27 $show->field('user_id', __('User id')); 28 $show->field('title', __('Title')); 29 $show->field('content', __('Content')); 30 $show->field('image', __('Image'))->image(); 31 $show->field('created_at', __('Created at')); 32 $show->field('updated_at', __('Updated at')); 33 dd($show); 34 35 return $show; 36 }
routes.php Route::get('public/{filename}', function ($filename) { $path = storage_path() . '/app/public/' . $filename; if(!File::exists($path)) abort(404); $file = File::get($path); $type = File::mimeType($path); $response = Response::make($file, 200); $response->header("Content-Type", $type); return $response; });
admin.php 'upload' => [ // Disk in `config/filesystem.php`. 'disk' => 'local', // Image and file upload path under the disk above. 'directory' => [ 'image' => 'public', 'file' => 'files', ], ],
filesystems.php 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), ], 'admin' => [ 'driver' => 'local', 'root' => storage_path('app'), 'visibility' => 'public', 'url' => env('APP_URL').'/storage', ], ],
参考にしたサイト
・Laravel 公式リファレンス
https://readouble.com/laravel/5.6/ja/filesystem.html
・Laravel-admin リファレンス
https://laravel-admin.org/docs/#/
・laravel-adminで管理画面を速攻で構築する。https://qiita.com/pikonori/items/a04066010e7380b3ee38#%E4%BD%9C%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%83%9A%E3%83%BC%E3%82%B8
・Laravel 5.7 laravel-admin CRUDを導入しよう
https://tac-blog.tech/index.php/2018/09/29/laravel-admin-add-crud/
↑こちらのブログのLaravel-admin関連の記事全般。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/30 13:35