Php Laravel:自定义多维数组验证

Php Laravel:自定义多维数组验证,php,validation,multidimensional-array,laravel,laravel-4,Php,Validation,Multidimensional Array,Laravel,Laravel 4,我有一个表单,用户可以一次插入许多记录。每个记录都有一个id、开始日期和结束日期。为了处理输入数据,我正在寻找验证所有这些内容的最佳方法 我至少需要一张唱片 对于每个输入的记录,id应该存在于另一个表中,开始日期和结束日期应该是有效日期,结束日期应该早于开始日期 所以我需要某种多维数组验证。。。是否有任何定制的验证插件/代码已经编码 我试图扩展Laravel验证,但我甚至无法接近我想要的 我所尝试的: app/services/validators/LearningPathValidator

我有一个表单,用户可以一次插入许多记录。每个记录都有一个id、开始日期和结束日期。为了处理输入数据,我正在寻找验证所有这些内容的最佳方法

  • 我至少需要一张唱片
  • 对于每个输入的记录,id应该存在于另一个表中,开始日期和结束日期应该是有效日期,结束日期应该早于开始日期
所以我需要某种多维数组验证。。。是否有任何定制的验证插件/代码已经编码

我试图扩展Laravel验证,但我甚至无法接近我想要的

我所尝试的:

app/services/validators/LearningPathValidator.php(我使用的是laravel扩展验证程序)

我的模型使用
课程[$index][course\u id]
课程[$index][date\u start]
课程[$index][date\u end]
作为字段名


事实上,正如我之前所说,我不能要求至少有一条记录,而且我不能保证结束日期会早于开始日期。有没有重写我编写的代码的建议?提前谢谢你

我创建了一个包来实现这一点,因为我在处理来自AngularJS的数据时遇到了同样的问题


这里有一个论坛上的东西,声称很管用。您是否考虑过使用AJAX,以便在同一时间只有一个请求?
<?php

use Crhayes\Validation\ContextualValidator;

class LearningPathValidator extends ContextualValidator
{
    protected $rules = [
        'default' => [
            'name'    => 'required|max:96',
            'courses' => 'required|multi_array:course_id=required;exists:courses,date_start=required;date_format:d/m/Y,date_end=required;date_format:d/m/Y'
        ],
    ];
}
<?php

class AppValidator extends Illuminate\Validation\Validator
{
    protected function validateMultiArray($attribute, $value, $parameters)
    {
        if (!is_array($value)) {
            return false;
        }

        foreach ($parameters as $parameter) {
            list($_attribute, $rules) = $this->parseRule(
                str_replace(['=', ';'], [':', ','], $parameter));

            foreach ($rules as $rule) {
                foreach (array_keys(Input::get($attribute)) as $idx){
                    $this->validate(sprintf('%s.%d.%s', $attribute, $idx,
                        snake_case($_attribute)), $rule);
                }
            }
        }

        return count($this->messages->all()) === 0;
    }
}
// ...

Validator::resolver(function($translator, $data, $rules, $messages) {
    return new AppValidator($translator, $data, $rules, $messages);
});

// ...