前提条件
画像ファイルの保存先 = storage/app/public
データベースにはファイル名
のみを保存。
ファイル名にはランダムな名前
が自動で割り当てられる。
フォームの作成
フォームタグの記述
formタグに enctype='multipart/form-data'
を記述しないとエラーを吐きます。
これを記述することで複数類(jpeg、png等)のデータ形式を扱う事でできるようになります。
create.blade.php
<form method="POST" action="{{ route('recommends.store') }}" enctype='multipart/form-data'>
@csrf
</form>
コントローラーの設定
imgがない場合に$path = $request->file('img')->store('public/img');
でエラーを吐くためif文で分岐させました。
recommendMovies/app/Http/Controllers/RecommendMovieController.php
public function store(Request $request)
{
if ($request->img === null) {
RecommendMovie::create([
'name' => $request->name,
'description' => $request->description,
'impression' => $request->impression,
]);
}else {
$path = $request->file('img')->store('public/img');
RecommendMovie::create([
'name' => $request->name,
'description' => $request->description,
'impression' => $request->impression,
'img' => basename($path)
]);
}
return redirect('/recommends')->with('message', '作成しました');
}
viewの設定
シンボリックリンクを使用します。
php artisan storage:link
storage\imgが作成され、この中にアップロードした画像が保存されます。
以下の記述でブラウザに表示させることができます。
recommendMovies/app/Http/Controllers/index.php
<img src="{{ asset('/storage/img/'.$recommend->img) }}">