Php Laravel验证阵列-传递2个参数?
我需要扩展laravel validator来创建一个新的验证器,但问题是我需要传递两个参数,一个用于Php Laravel验证阵列-传递2个参数?,php,laravel,laravel-5.3,Php,Laravel,Laravel 5.3,我需要扩展laravel validator来创建一个新的验证器,但问题是我需要传递两个参数,一个用于天,一个用于插槽。如何解决这个问题 示例dd($request->all)dump: array:2 [ "days" => array:2 [ 0 => "1" // Mon 1 => "2" // Tue ] "slots" => array:2 [ 1 => array:2 [ "open" => "09:
天
,一个用于插槽
。如何解决这个问题
示例dd($request->all)
dump:
array:2 [
"days" => array:2 [
0 => "1" // Mon
1 => "2" // Tue
]
"slots" => array:2 [
1 => array:2 [
"open" => "09:00"
"close" => "11:30"
]
2 => array:2 [
"open" => "16:00"
"close" => "21:00"
]
]
]
它需要循环使用天
并检查插槽
伪代码,例如:
foreach($days as $day) {
foreach($slots as $slot)
{
// Validation Logic for $day and $slot (open and close)
}
}
这是另一种方法
boot()
方法中添加自定义处理程序:
\Validator::resolver(function($translator, $data, $rules, $messages) {
return new MyCustomValidator($translator, $data, $rules, $messages);
});
class MyCustomValidator extends Illuminate\Validation\Validator;
{
public function validateSlotsInDays($attribute, $value, $parameters){
$valid = false;
$days = \Request::input($parametros[0]);
$slots = $value;
foreach($days as $day) {
foreach($slots as $slot) {
// Validation Logic for $day and $slot (open and close)
}
}
return $valid;
}
public function validateSlot($attribute, $value, $parameters){
$valid = false;
$days = \Request::input($parametros[0]);
$slot = $value;
foreach($days as $day) {
// do whatever here
}
return $valid;
}
}
$rules = [
'slots' => ['slots_in_days:days'],
];
查看我如何将天数作为参数传递。此外,如果需要单独验证每个插槽并显示每个插槽的消息,请应用如下规则:
$rules = [
'slots.*' => ['slot:days'],
];
php artisan make:provider ValidationServiceProvider
然后转到config\app.php
并将其添加到providers
App\Providers\ValidationServiceProvider::class
现在转到ValidationServiceProvider.php
并添加
use Validator;
到顶端
在boot()
函数中
Validator::extend('days_with_slots', function($attribute, $value, $parameters, $validator) {
$slots = request()->get('slots');
if(!is_array($slots)) return false;
foreach($days as $day) {
foreach($slots as $slot) {
if(empty($slot[$day]) || empty($slot[$day]['open'] || empty($slot[$day]['close']))) {
return false;
}
}
}
});
最后,在你的规则中使用这个
$rules['slots'] = 'days_with_slots'
您还可以为它添加自定义消息,例如
$message['days_with_slots'] = 'Open and Close Timings are required for the days selected'
希望这有帮助:)验证程序::解析程序和验证程序::扩展之间有什么区别?如何在验证程序::扩展中定义自定义错误消息?每个错误消息都应该有插槽键。我想在错误消息中输入“打开”和“关闭”的值。@I'll-Back Sry,等待延迟回复。。。下次请给我贴标签,这样我就知道了。。。出于某种原因,我没有得到通知。您可以将所有扩展验证消息添加到全局列表
resources/lang/validations.php
或创建自己的验证器(通过扩展light\Validation\Validator)并用自己的函数覆盖消息函数。。。并使用您自己的验证器。。。