Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel验证阵列-传递2个参数?_Php_Laravel_Laravel 5.3 - Fatal编程技术网

Php Laravel验证阵列-传递2个参数?

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:

我需要扩展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: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)
   }
}

这是另一种方法

  • 在AppServiceProvider中,在
    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'],
    ];
    
  • 附加文件:


    这是进行自定义Laravel验证的正确方法

    使用创建您自己的验证服务提供商

    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)并用自己的函数覆盖消息函数。。。并使用您自己的验证器。。。