Laravelでいくつかのカスタム検証ルールに取り組んでいます。2つの日付のカスタム検証を追加していますが、戻り日は出発日から6日後でなければなりません。カスタム検証を追加すると、次のエラーが発生し続けます。
(1/1)ValidationRuleParser.php行107で、クラスClosureのErrorExceptionオブジェクトを文字列に変換できませんでした
手伝ってください
コントローラ
public function validatePlanEntries(Request $request)
{
$validation = $this->validate($request, [
'departure_date' => 'required|date|after:now',
//Must be 6 days after departure date
'return_date' => ['required', 'date', function ($attribute, $value, $fail) {
if (strtotime($value) < strtotime(request('departure_date')) + 518400) {
$fail('Departure date invalid');
}
}],
]);
}
コメントで述べたように、コールバック検証ルールをサポートしないバージョンのLaravelを使用していますが、残念ながら、これを行う唯一の方法は、新しいルールでバリデーターを拡張することです。
これをサービスプロバイダーの1つに追加します(例AppServiceProvider
)
public function boot() {
//Other boot things
$validator = app()->make(\Illuminate\Validation\Factory::class);
$validator->extend('return_date_after', function ($attribute, $value, $parameters, $validator) {
$otherAttribute = array_get($parameters, 0);
$days = array_get($parameters, 1, 6); //default 6 days
$otherValue = array_get($validator->getData(), $otherAttribute);
if (strtotime($value) < strtotime($otherValue) + $days*24*60*60) {
return false;
}
return true;
});
$validator->replacer('return_date_after', function ($message, $attribute, $rule, $parameters) {
return 'Your return date must be '.array_get($parameters,1,6).' days after your '.array_get($parameters, 0);
});
}
次に、このカスタムルールを次のように使用できます。
$validation = $this->validate($request, [
'departure_date' => 'required|date|after:now',
//Must be 6 days after departure date
'return_date' => ['required', 'date', 'return_date_after:departure_date,6' ]
]);
なお、$message
お使いの代用品では、から来ているresources/lang/<locale>/validation.php
ので、あなたは、このような「return_date_after」としてそこにエントリを追加し、代用の代わりに、静的なテキストを返すには、それをmanipualteすることができます。例えば:
"return_date_after" => "Your :attribute must be :days days after your :other_attribute"
そして、あなたの代替品は次のようになります:
$validator->replacer('return_date_after', function ($message, $attribute, $rule, $parameters) {
return str_replace([ ":days", ":other_attribute" ],
[ array_get($parameters, 1, 6), array_get($parameters,0) ],
$message);
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加