##はじめに
ここではlaravelのvalidationのかけ方をまとめたいと思います。
またvalidation関連で勉強した内容をこちらに追記していきたいと思います。
##環境
Version | |
---|---|
PHP | 7.4.25 |
Laravel | 8.69.0 |
mysql | 8.0.27 |
##①コントローラーにそのまま書く方法
Illuminate\Http\Requestオブジェクトのvalidateメソッドを使用する。
class UserController extends Controller
{
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'email' => 'required|email',
]);
}
|
で区切ることでバリデーションルールを追加できる。右から順に適応されていく。
laravel8系のバリデーションルール
##②Requestsディレクトリに分けて書く方法
はじめにApp/Requestsディレクトリにコントローラー名/アクション名Request.php
を作成しクラスを作ります。
今回の例はコントローラー名で名前空間をつくっています。
% php artisan make:request UserController/StoreRequest.php
以下が作成されたUserControllerのStoreRequestクラスになります。このファイルにvalidationを記述していきます。
authorizeメソッドはreturn true
にしておきます。falseだとエラーが発生しました。
namespace App\Http\Requests\UserController;
use Illuminate\Foundation\Http\FormRequest;
class UpdateRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// 左側のkeyがフォームのname属性
'name' => 'required',
'email' => 'required|email|',
];
}
}
次にコントローラーでStoreRequestクラスをuseして、そのインスタンスを引数に入れて使用します。
use App\Http\Requests\UserController\StoreRequest;
class UserController extends Controller
{
public function store(StoreRequest $request)
{
// 先ほどのvalidationは消します
// $request->validate([
// 'name' => 'required',
// 'email' => 'required|email',
// ]);
}
}
これでファイルで分割したvallidationを実装することができました!
##おわりに
どちらでもvalidationを書くことができますが、個人的にはファイルで分けたほうがControllerがスッキリしてみやすくなるのかなと思いました。これから臨機応変に対応していきたいです。