Laravel 画像アップロード、リサイズなし
概要
バリデーション->1920px x1080pxじゃないとアップロードできないバリデーションをつける
画像サイズ(1920px x 1080px (FullHD)) 比率は 16:9
->ユーザ側でリサイズしてもらう
->サーバー側でリサイズする場合
-> Intervention Image
を使う 重複しないファイル名に変更して保存
view側
DBへ保存するのでpost,素材はadmin/owners/create
から持ってくる、画像UPの場合enctype="multipart/form-data"
つける
<form method=“post” action=“” enctype=“multipart/form-data”>
画像の場合file,name属性でコントローラのほうでimageとすれば画像を取得できる
accept属性でファイル形式の指定
<input type=“file” accept=“image/ png,image/jpeg,image/jpg”>
route
matchメソッドで複数のHTTP動詞に応答するルートを登録する。
→コントローラーでeditとupdateを1つに書ける。
<?php Route::get('/', function () { //prefix設定 return view('owner.welcome'); }); //shopのルート Route::prefix('shops')-> middleware('auth:owners')->group(function(){ Route::get('index', [ShopController::class, 'index'])->name('shops.index'); Route::match(['get','post'],'edit/{shop}', [ShopController::class, 'edit'])->name('shops.edit'); });
Controller
リサイズしないパターン
<?php use Illuminate\Support\Facades\Storage; /** * shop画像アップロード画面遷移+更新 * @param $request * @param $id */ public function edit(Request $request, $id) { if($request->isMethod('get')){ $this->viewData['shop'] = Shop::findOrFail($id); return view('owner.shops.edit', $this->viewData); } if($request->isMethod('post')){ //$request->imageでname属性を取得することで画像を取得できる $imageFile = $request->image; //画像がnullでなかったら && isValidでアップロードできたか判定 if(!is_null($imageFile) && $imageFile->isValid()){ //storageファサードのputFileメソッドでstorage配下のshopsフォルダ内に保存処理を行う Storage::putFile('public/shops', $imageFile); } } return redirect()->route('owner.shops.index'); }