Laravel のValidationの使い方を
RestAPIの受け取りなど型のチェックが面倒な際にまとめて行いたい時など便利。
use Illuminate\Validation\Factory;
/** @var Factory $validator */
$validator = app("validator");
$val = $validator->make([
"data" => $contents
],[
"data" => "is_array",
"data.status" => "is_array",
]);
ルールの一覧
実行
内部的に検証の実施は passes
メソドが行っている。
if($val->passes()){
// 成功時の処理
}
fails
メソドは内部的にpasses
を呼び出し!
で逆評価している。
if($val->fails){
// エラー時の処理
}
messages
はエラーメッセージを取得するメソドで自動的にpasses
を呼び出す。
$errors = $val->messages();
valid
invalid
は検証に成功した/失敗したデータを返すメソドで、自動的にpasses
を呼び出す。
$data = $val->valid();
passes 実行後にコールするもの
messages
はpasses
実行後にコールしても、再度検証が実行されるということはない。
failed
は検証に失敗したルールの取得で呼び出す。 failed
だからすでに検証実行した前提。
// 失敗したルールの取得
$val->failed();
失敗時の処理を例外に投げたい場合には ValidationException
を使用するのが便利。
コンストラクタの第一引数に$val
を渡してあげる感じ。
Laravel と Validation
エラーの判定
Validator::make() で作成したエラーオブジェクトから
エラーの有無をチェックする -> fails() :bool
エラーを取得する -> errors() :Illuminate\Support\MessageBag
が使える。
MessageBag
MessageBag::all() :array
メッセージを全件取得する。フィールド名とかのインデックスはつかない。
MessageBag::get($key) :array
フィールド名$key
でメッセージを取得。 メッセージは配列
エラーがないときは空の配列を
MessageBag::first($key) :string
フィールド名$key
でメッセージを取得。 最初の一件のみで文字列取得出来る。
エラーが無いときは空の文字列を
例外について
ValidationException は2つある。
Illuminate\Validation\ValidationException;
Illuminate\Contracts\Validation\ValidationException
Illuminate\Validation\ValidationException;
\Exception
を直接の親に持つ
コンストラクタ引数は $validatior
と $response = null
ErrorHandlerで$response付きだとrenderされるタイプの例外で dontReport対象
Illuminate\Contracts\Validation\ValidationException
\RuntimeException
を直接の親に持つ
コンストラクタの引数は \Illuminate\Contracts\Support\MessageProvider $provider
\Illuminate\Validation\ValidatesWhenResolvedTrait
のthrow系メソドではこちらの例外が投げられるみたい。