laravel バリデーション 調べてみた
laravelのバリデーションについて
laravelでバリデーションを実装するには3つの方法があります。
①controller内でのバリデーション
②ファザードを利用したバリデーション
③フォームリクエストでのバリデーション
controller内でのバリデーション
コントローラーでは標準でバリデーションを実装できるvalidateメソッドが利用できます。
以下使用例になります。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function show(Request $request) {
$rules = [ ・・・①
'name' => ['required', 'unique'] ・・・②
];
$this->validate($request, $rules); ・・・③
$name = $request->get('name'); ・・・④
}
}
①バリデーションルールを配列で指定します。
②バリデーションルールは、キーにバリデートする値を、値にバリデーションルールを配列または|区切りで指定します。
指定できるバリデーションルールは公式ドキュメントを参照してください。
③引数にバリデートする値とバリデーションルールを指定して、validateメソッドを実行します。
④③が通れば、④以降の処理を実行します。
③でバリデーションルールに引っかかった場合は、前のページへリダイレクトします。
ファザードを利用したバリデーション
Illuminate\Support\Facades\Validatorをインスタンス化することでもバリデーションを実装できます。
以下使用例になります。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class HomeController extends Controller
{
public function show(Request $request) {
$rules = [ ・・・①
'name' => ['required', 'unique'] ・・・②
];
$validator = Validator::make($request, $rules); ・・・③
if ($validator->fails()) { ・・・④
}
$name = $request->get('name'); ・・・⑤
}
}
① 、②はコントローラー内でのバリデーションの時と同様にバリデーションルールを指定します。
③Validatorファザードのmakeメソッドを実行します。
④③で作成した$validatorに対してfailsメソッドを実行することでバリデーションが実行されます。
バリデーションに引っかかった場合は、if文内の処理を実行します。
⑤④でバリデーションに通った場合に、④以降の処理を実行します。
フォームリクエストでのバリデーション
以下にまとめていますので、参考にしてください。
バリデーション失敗時は、デフォルトでは前の画面にリダイレクトするのですが、Illuminate\Fundation\Http\FormRequestのオーバーライドなどでカスタマイズ可能です。
エラーメッセージの表示
エラーメッセージは、Bladeテンプレートで以下の様に表示させることができます。
@if($errors->has('name'))
<p class="error-text">{{$errors->first('name')}}</p>
@endif
上記の例では、nameがバリデーションに引っかかったらバリデーションメッセージを出力するようになっています。
これ以外にも、全てのエラーメッセージを一度に取得する@errors->allなどが使用できます。
また、フォームリクエストではエラーメッセージをカスタマイズすることができます。
以下、使用例になります。
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class userRegister extends FormRequest
{
public function authorize()
{
return false;
}
public function messages() ・・・①
{
return [ 'name.required' => '名前は必ず入力してください', ];
}
public function rules()
{
return [
'name' => 'required | string | max:255',
'email' => [ 'required', 'string', 'email', 'max:255', ]
];
}
}
①messages 関数を実装することでエラーメッセージのカスタマイズが可能です。
独自ルールの作り方
以下コマンドで独自ルールのファイルをapp\Rules以下に作成できます。
php artisan make:rule ファイル名
作成した例は以下になります。
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class TextRule implements Rule
{
public function __construct()
{
//
}
public function passes($attribute, $value) ・・・①
{
return $value === 'annkw';
}
public function message()
{
return '文字列がannkwではありません。'; ・・・②
}
}
①バリデーションルールを作成します。
返り値がtrueであればバリデーション成功、falseであればバリデーション失敗になります。
(例では文字列がannkwかどうかという一生使わないであろうバリデーションルールを作成しました)
②エラーメッセージを指定します。
使い方は、バリデーションルールを作成するときにインスタンス化するだけです。
以下例になります。
$rules = [
'name' => ['required', 'unique'], 'text' => new TextRule() ];
以上!!!!!!!