Laravel バリデーションについてまとめていくよ1

laravelのバリデーションをまとめていきます。
基本的な使い方はドキュメントを参照してもらうとして、もう少し細かい部分まで確認してみたいと思います。
今回は、必須などのデータの有無についてのバリデーションを確認します。

laravel/frameworkのバージョンはv9.45.1です。
参考までに、バリデーションの実装部分のソースのリンクもつけておきます。
実装部分の前に行われる処理もありますので、注意してください。

required | 必須

必須のチェックを行います。リクエストにパラメーターが含まれていない場合は、エラーとなります。
文字列に対してはtrimを行いますので、半角スペースのみの場合もエラーとなります。

$rules = ['parameter' => 'required'];

// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // false

// 値がnull
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // false

// 値が空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // false

// 値が半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // false

// 値が空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // false

$data = ['parameter' => 'a'];
Validator::make($data, $rules)->passes(); // true

$data = ['parameter' => ['a', 'b']];
Validator::make($data, $rules)->passes(); // true

https://github.com/laravel/framework/blob/v9.45.1/src/Illuminate/Validation/Concerns/ValidatesAttributes.php#L1617-L1637

filled | 値があること

基本的には必須(required)と同じ条件となりますが、リクエストにパラメーターが含まれていない場合はエラーとなりません。

$rules = ['parameter' => 'filled'];

// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // true

// 値がnull
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // false

// 値が空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // false

// 値が半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // false

// 値が空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // false

$data = ['parameter' => 'a'];
Validator::make($data, $rules)->passes(); // true

$data = ['parameter' => ['a', 'b']];
Validator::make($data, $rules)->passes(); // true

https://github.com/laravel/framework/blob/v9.45.1/src/Illuminate/Validation/Concerns/ValidatesAttributes.php#L1047-L1061

present | 存在すること

リクエストにパラメーターが含まれることをチェックします。
値についてのチェックは行われません。

$rules = ['parameter' => 'present'];

// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // false

// 値がnull
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // true

// 値が空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // true

// 値が半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // true

// 値が空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // true

$data = ['parameter' => 'a'];
Validator::make($data, $rules)->passes(); // true

$data = ['parameter' => ['a', 'b']];
Validator::make($data, $rules)->passes(); // true

https://github.com/laravel/framework/blob/v9.45.1/src/Illuminate/Validation/Concerns/ValidatesAttributes.php#L1567-L1577

prohibited | 禁止

リクエストがないこと(リクエストに含まれないもしくは空文字)であることをチェックします。
nullと、空配列の場合は注意が必要です。

$rules = ['parameter' => 'prohibited'];

// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // true

// 値がnull
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // false

// 値が空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // true

// 値が半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // true

// 値が空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // false

$data = ['parameter' => 'a'];
Validator::make($data, $rules)->passes(); // false

$data = ['parameter' => ['a', 'b']];
Validator::make($data, $rules)->passes(); // false

https://github.com/laravel/framework/blob/v9.45.1/src/Illuminate/Validation/Concerns/ValidatesAttributes.php#L1737-L1748

まとめ

パラメーターなし null 空文字 空配列 値あり
必須(required) false false false false true
値があること(filled) true false false false true
存在すること(present) false true true true true
禁止(prohibited) true false true false true

コメント

コメントは公開されません。誤記、お問い合わせなどお気軽に送信してください。