我有各种各样的东西......
$foo = [];
$foo['stuff']['item'][0]['title' => 'flying_lotus'];
$foo['stuff']['item'][1]['title' => 'various_cheeses'];
$foo['stuff']['item'][2]['title' => 'the_career_of_vanilla_ice'];
$foo['stuff']['item'][3]['title' => 'welsh_cats'];
Run Code Online (Sandbox Code Playgroud)
如何使用Laravel 4中的Validator方法验证'title'键?
这是我到目前为止所拥有的......
$validator = Validator::make($foo, ['stuff.item.???.title' => 'required']);
Run Code Online (Sandbox Code Playgroud)
我完全被索引数组搞砸了.任何帮助都会很棒.
Ake*_*rts 19
以下答案适用于Laravel <= 5.1.Laravel 5.2引入了内置的数组验证.
此时,Validator类并不意味着迭代数组数据.虽然它可以遍历嵌套数组以查找特定值,但它期望该值为单个(通常string)值.
我看到它的方式,你有几个选择:
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());
Run Code Online (Sandbox Code Playgroud)
2:创建自定义验证方法.
这将允许您创建自己的规则,您可以期望数组值并根据需要迭代它.
这个方法有一些注意事项,A)你不会有特定的值错误消息,因为它会对整个数组产生错误(例如,如果你stuff.item作为要检查的值传递),并且B)你需要在自定义函数中检查所有数组的可能值(我假设您不仅仅title需要验证).
您可以使用Validator::extend()或通过在其他位置完全扩展类来创建验证方法.
3:扩展Validator类并替换/ parent有问题的规则以接受数组.
创建自己的扩展Validator类,并实现自定义规则或重命名现有规则,使这些规则能够接受数组值(如果有的话).这与#2自定义规则选项有一些类似的警告,但如果您打算经常验证迭代数组,则可能是"最佳实践".