フォームを実装する際にはもれなくついてくるであろうバリデーションをフォームリクエストで実装する方法。
自分用の備忘録です。
##環境
OS: Windows 10 home
CPU: AMD Ryzen 2700X
GPU: NVIDIA GTX 1060
RAM: 16GB 2666Mhz
PHP: ver 8.0.3
Laravel: ver 8.45.1
MySQL(MariaDB): ver 15.1
##1.Requestの作成
php artisan make:request ImageRequestt
例としてImageRequestを作成。
##2.Requestの中身
ImageRequest.php
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ImageRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'image' => 'required|mimes:jpg,jpeg,png|max:20480',
'title' => 'required|min:2|max:100',
];
}
}
}
作成直後では、上記のようになっている。
authorizeメソッドの戻り値は基本的にtrueにしておく。
rulesメソッド内に必要なだけバリデーション内容を記述していきます。
##3.コントローラーの中身
ImageUploadController.php
<?php
namespace App\Http\Controllers;
use App\Models\Image_upload;
use Illuminate\Http\Request;
use App\Http\Requests\ImageRequest;
class ImageUploadController extends Controller
{
public function store(ImageRequest $request)
{
$newImage = new Image_upload();
$newImage->title =$request->input('title');
if($request->hasfile('image')){
$file = $request->file('image');
$extention = $file->getClientOriginalExtension();
$filename = time().'.'.$extention;
$file->storeAs('public/images',$filename);
$newImage->image = $filename;
}
$newImage->save();
}
}
ImageRequestクラスが使えるよう冒頭に名前空間とクラスを足したuse宣言を記述しておきます。
use App\Http\Requests\ImageRequest;
次にstoreメソッド内のタイプヒントでImageRequestクラスを指定します。
public function store(ImageRequest $request)
これでstoreメソッドでは、ImageRequestで定めたrulesメソッドに基づいて入力された値をバリデートすることが出来ます。