Laravelを使い初めて、画像アップロード公開がものすごく簡単に実装できて感動したので、投稿します。
1、画像を保存。
(1) 下準備
/config/filesystem.phpの設定を変更。
'default' => env('FILESYSTEM_DRIVER', 'local'),
localのままだと不都合があるため(これから説明)、.envファイルに下記を追記しpublicに設定変更してあげる。
/.env
FILESYSTEM_DRIVER=public
(2) 画像をアップロード
$image = $request->image->store('posts');
この1行で画像自体のアップロードは完了。
後は必要に応じて返り値の画像パスをDBに保存するだけ。
formから送られてきた画像データに対し、storeメソッドを呼ぶと、storage/app/public配下にデータが保存される。例のようにstoreメソッドでディレクトリを指定することもできる。今回の場合は、storage/app/public/posts配下に保存される。
※localのままだと、storage/app直下に保存されるので、これから説明するシンボリックリンクがはれない。
2、画像を表示
(1) viewで表示できるように、laravelの公開用publicフォルダにシンボリックリンクをはる。
php artisan storage:link;
上記コマンドをターミナルで実行すると、
public配下にstorageリンクが作成される。
/public/storage/画像パス
(2) viewで表示
<img src="{ asset('storage/画像のパス') }}">
で保存した画像をviewで表示できる。
※asset()を使うとフルパスになる。
3、アップロードした画像の削除
DBから画像のパスを削除した際に、Storageフォルダにアップロードした画像を同時に削除する方法。
Storageファサードのdeleteメソッドで保存していた画像を削除できる。
use Illuminate\Support\Facades\Storage;
Storage::delete('画像パス');
データ削除した際に、上記メソッドを行えば、画像データも同時に削除できる。
以上、で簡単に画像のCRUDが実装できます。
参考:(公式ドキュメント)
https://readouble.com/laravel/5.8/ja/filesystem.html