以下答案适用于 Laravel 内置数组验证.
此时,Validator 类并不意味着迭代数组数据。虽然它可以遍历嵌套数组来查找特定值,但它期望该值是单个值(通常是string
) value.
在我看来,你有几个选择:
1:创建规则,字段名称中包含数组键。
基本上基本上你已经在做什么了,除了你需要弄清楚你的值到底有多少['stuff']['item']
数组有。我做了这样的事情并取得了良好的效果:
$data = [
'stuff' => [
'item' => [
['title' => 'flying_lotus'],
['title' => 'various_cheeses'],
['title' => ''],
['title' => 'welsh_cats'],
]
]
];
$rules = [];
for ($i = 0, $c = count($data['stuff']['item']); $i < $c; $i++)
{
$rules["stuff.item.{$i}.title"] = 'required';
}
$v = Validator::make($data, $rules);
var_dump($v->passes());
2:创建自定义验证方法。
这将允许您创建自己的规则,您可以在其中期望一个数组值并根据需要对其进行迭代。
此方法有其警告,A)您不会有特定值的错误消息,因为它会对整个数组出错(例如,如果您传递stuff.item
作为要检查的值),B)您需要在自定义函数中检查数组的所有可能值(我假设您不仅仅有title
验证)。
您可以使用以下方法创建验证方法Validator::extend()或者将课程完全扩展到其他地方。
3:扩展 Validator 类并替换/设置相关规则的父级以接受数组。
创建您自己的扩展 Validator 类,并实现自定义规则或重命名现有规则,使这些规则能够接受数组值(如果发生)。这与 #2 自定义规则选项有一些类似的注意事项,但如果您打算经常验证迭代数组,这可能是“最佳实践”。