【问题标题】:Laravel: custom multidimensional array validationLaravel:自定义多维数组验证
【发布时间】:2014-01-28 02:35:52
【问题描述】:

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

  • 我必须要求至少一条记录
  • 对于每一个输入的记录,id应该存在于另一个表中,开始日期结束日期应该是有效日期并且结束日期 应该早于开始日期

所以我需要某种多维数组验证...是否有任何自定义验证插件/代码已经为此编码?

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

我尝试过的:

app/services/validators/LearningPathValidator.php(我正在使用 laravel-extended-validator

<?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'
        ],
    ];
}

app/validations.php(这里我扩展了 Illuminate\Validation\Validator 类)

<?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;
    }
}

我的start/global.php:(这里我用AppValidator扩展Illuminate\Validation\Validator

// ...

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

// ...

我的模型使用courses[$index][course_id]courses[$index][date_start]courses[$index][date_end] 作为字段名称。

实际上,正如我之前所说,我不能要求至少有一条记录,而且我不能保证结束日期会早于开始日期。有什么建议可以重写我编码的内容吗?提前谢谢!

【问题讨论】:

标签: php validation multidimensional-array laravel laravel-4


【解决方案1】:

我创建了一个包来执行此操作,因为我在来自 AngularJS 的数据中遇到了同样的问题。

https://github.com/lakedawson/vocal

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-13
    • 2020-08-06
    • 2014-08-31
    • 1970-01-01
    • 2017-11-19
    • 2012-11-27
    • 2018-10-25
    • 2020-03-11
    相关资源
    最近更新 更多