Laravelのresourceコントローラーでparameter名とname属性が同じだとダメ

タイトル通りですが、もうちょっと詳細に見ておこう

例えば以下のようにリソースコントローラーを作成するとします

まずRoute設定

php artisan make:controller ImageController --resource

// route設定
Route::resource('images', ImageController::class);

画像の編集画面でupdateを行う場合

// edit.blade.php

<form method="post" action="{{ route('owner.images.update', ['image' => $image->id]) }}" enctype="multipart/form-data">

<input type="file" name="image" id="image" />

</form>

name=”image” とparameterの名前が同じで、且つファイルを未選択した場合、ImageControllerのほうでは、$request->image; がnullではなく$image->idの値が参照される。ファイルを選択した場合なら、ちゃんと選択したファイルが参照されるので問題がありません。

// ImageController.php

public function update(Request $request, string $id)
{
    // ファイル未選択の場合(nullではなく、$idの値が参照されてしまう)
    $image = $request->image;
}

これを回避するために、name=”uploadImage”など、別の名前にすればいいです。

コメント

タイトルとURLをコピーしました