LoginSignup
12
10

More than 5 years have passed since last update.

LaravelとValidation

Last updated at Posted at 2016-06-28

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 実行後にコールするもの

messagespasses実行後にコールしても、再度検証が実行されるということはない。

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系メソドではこちらの例外が投げられるみたい。

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10