概要
laravelではいくつかの方法でバリデーションをかけることができます。
そのため一度に投稿するとボリュームが多くなるので複数回に分けます。
・Validatorによるバリデーション
・FormRequestによるバリデーション
・ruleオブジェクトによる検証ルールの追加
・バリデーションエラーの表示と日本語化
validateクラスとは
validateメソッドはControllerクラスに組み込まれているIlluminate\Http\Request
オブジェクトのメソッドを使います。
validateメソッドでは、POSTされた値のバリデーションに成功するとコードは通常通り続けて実行され、バリデーションに失敗すると自動的に例外が投げられてユーザーにエラーメッセージが返されるため手軽にバリデーションを実行できます。
コントローラーとルーティングの作成
例としてFormControllerでバリデーションのコードを記述するため、コントローラーとルーティングを作成します。
ルートの定義
FormControllerクラスのpostValidatesメソッドへのルーティングを記述します。
Route::post('sample', 'FormController@postValidates');
コントローラーの作成
バリデーションを実行するFormControllerクラスを作成します。
Controllerの作成なので段落だけ付けて詳細は割愛します。
コマンド
php artisan make:controller FormController
ディレクトリ構造
app
├─ Http
| ├─ Controllers
| | ├─ FormController.php
作成されるファイル
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class FormController extends Controller
{
//
}
バリデーションの作成
作成したFormControllerにpostValidatesというメソッドを作成してバリデーションの処理を記述していきます。
(ここのメソッド名はなんでもいいです。)
public function postValidates(Request $request)
{
//
}
バリデーションの記述
validateメソッドは$request->validate(['検証の配列'])
または$this->validate($request,[検証の配列]);
で作成します。
reurnはバリデーションが成功した際にビューで出力する値です。
記述例は載せますが解説は前者で統一します。
public function postValidates(Request $request)
{
$request->validate([
'name' => 'required',
'age' => 'integer | between:0,150',
'sex' => ['max:1', 'regex:/^[男|女]+$/u'],
];)
return view('sample.index',['msg'=>'OK']);}
}
// 記述方法:$request->validate(['検証の配列']);
public function postValidates(Request $request)
{
$validate_rule = [
'name' => 'required',
'age' => 'integer | between:0,150',
'sex' => ['max:1', 'regex:/^[男|女]+$/u'],
];
$this->validate($request,$validate_rule);
return view('sample.index',['msg'=>'OK']);
}
// 記述方法:$this->validate($request,[検証の配列]);
validateメソッドの配列
連想配列で['postしてきた値'=>'検証ルール']
となっています。
検証ルールを複数設けたい場合は検証ルールの間に|
を入れて区切ります。
もしくは、配列のバリュー(検証ルール)を配列にして,
で区切って記述することもできます。
$request->validate([
'name' => 'required',
'age' => 'integer | between:0,150',
'sex' => ['max:1', 'regex:/^[男|女]+$/u'],
];)
// 記述方法:['検証する値'=>'検証ルール1 | 検証ルール2',]
// もしくは、['検証する値'=>['検証ルール1', '検証ルール2'],]
required:何かしらの値があること
integer:半角整数であること
between:a,b:aからbまでの数字
max:a:文字数の最大値がa個
regex::PHPのpreg_match関数
エラーメッセージのカスタマイズ
エラーメッセージをカスタマイズするには、第2引数にエラーメッセージを記述します。
ただし、エラーメッセージは検証ルールごとに設定する必要があるため、エラーメッセージの設定がない検証ルールはデフォルトのエラーメッセージが返されます。
public function postValidates(Request $request)
{
$request->validate([
'name' => 'required',
'age' => 'integer | between:0,150',
'sex' => ['max:1', 'regex:/^[男|女]+$/u'],
],
[
'name.required' => '名前を入力してください',
'age.numeric' => '整数で入力してください',
'age.between' => '0~150で入力してください'
'sex.regex' => '男か女で入力してください',
]);
return view('sample.index',['msg'=>'OK']);}
}
name(required):名前を入力してください
age(integer):整数で入力してください
age(between):0~150で入力してください
sex(max:1):The sex may not be greater than 1 characters.
sex(regex:/^[男|女]+$/u):男か女で入力してください
参考
[
Laravel 6.x バリデーション]
(https://readouble.com/laravel/6.x/ja/validation.html)
[Laravelのvalidationメソッドでバリデーションを実装する入門編]
(https://www.ritolab.com/entry/40)
[入門者のためのLaravelのValidationとエラーメッセージ]
(https://reffect.co.jp/laravel/laravel_validation_understanding)
[はじめてLaravel6.0:バリデーション追加&カスタムバリデーション/入力画面(2)]
(https://arakan-pgm-ai.hatenablog.com/entry/2019/10/30/000000)
[【保存版】バリデーションルールまとめ]
(https://www.wakuwakubank.com/posts/376-laravel-validation/)