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');
    }