gpt4 book ai didi

php - Laravel:自定义多维数组验证

转载 作者:可可西里 更新时间:2023-10-31 23:40:53 27 4
gpt4 key购买 nike

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

  • 我至少需要一个记录
  • 对于每条输入的记录,id 应该存在于另一个表中,date startend date 应该是有效日期,end日期 应该早于开始日期

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

我已经尝试扩展 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] 作为字段名称。

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

最佳答案

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

https://github.com/lakedawson/vocal

关于php - Laravel:自定义多维数组验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com