2017-04-10 13 views
1

私はカスタムバリデータを持っています。私はバリデータがこの文字列のための私のカスタム検証機能を実行しません。だから、なぜLaravelは空の文字列でバリデータを実行しません

$v = Validator::make(['test' => '  '], ['test' => 'custom_validator']); 
$v->errors()->all(); // returns [], so validator passed what is wrong 

だけスペースを含む文字列を渡すとき、私は

$v = Validator::make(['test' => 'a'], ['test' => 'custom_validator']); 
$v->errors()->all(); // returns [ 
    "validation.custom_validator", 
    ] 

を検証しかし、どのように

Validator::extend('custom_validator', function($attribute, $value, $parameters, $validator) { 
     return $value === '1'; 
}); 

そして?

+0

'Validator :: extendImplicit()'を試しましたか? – linktoahref

+0

しかし、このフィールドは必須ではありません。要求に合格しなかった場合は、検証に失敗します。 –

答えて

0
Validator::extendImplicit('custom_validator', function($attribute, $value, $parameters, $validator) { 
    if($value === null) return true; // this line checks for 'empty' strings 
    return $value === '1'; 
}); 

内部laravelは、入力データにtrim機能を実行し、文字列が空の場合、バリデータではないためextendImplicitは、(すべての文字列を検証しますが、空の文字列をextend検証しないので、私は、extendメソッドの代わりにextendImplicitを使用していました全く実行されました!)

+1

詳細を編集してください。コード専用と「試してください」の回答は、検索可能なコンテンツが含まれていないため、推奨されません。なぜ誰かが「これを試してみる」べき理由を説明しません。私たちはここで知識のためのリソースとなるよう努力しています。 – abarisone