我有各种各样的东西…
$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'];
如何使用Laravel 4中的Validator方法验证“标题”键?
这是我到目前为止
$validator = Validator::make($foo,['stuff.item.???.title' => 'required']);
我被索引的数组完全闪过.任何帮助都会很棒.
此时,Validator类并不意味着迭代数组数据.虽然它可以遍历一个嵌套的数组来找到一个特定的值,但它期望该值是一个(通常是字符串)的值.
我看到的方式,你有几个选择:
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());
这将允许您创建自己的规则,您可以在其中预期数组值,并根据需要对其进行迭代.
这个方法有其注意事项,因为A)你不会有特定的价值错误消息,因为它将错误的整个数组(例如,如果你通过stuff.item作为要检查的值),并且B)需要检查您的自定义函数中的所有数组的可能值(假设您将不仅仅具有要验证的标题).
您可以使用Validator::extend()
创建验证方法,或通过在其他地方完全扩展该类.
3:扩展Validator类并替换/ parent相关规则以接受数组.
创建您自己的扩展验证器类,并实现自定义规则,或重命名现有规则,使这些规则可以接受数组值.这与#2自定义规则选项有一些类似的注意事项,但如果您打算经常验证迭代阵列,则可能是“最佳实践”.