无法验证Laravel中的嵌套数组

时间:2018-10-07 20:41:27

标签: php laravel

当使用相同的键和规则验证嵌套数组时,例如,如果规则为:

$rules = [ 'elem.*.test' => 'required', 'elem.*.subitem.test' =>
'required', ];

和消息:

$messages = [ 'elem.*.test.required' => 'top level item required', 'elem.*.subitem.test.required' => 'sub item required', ];

2 个答案:

答案 0 :(得分:2)

Str::is()在FormatsMessages :: getFromLocalArray()中被调用。

您不能使用

str_replace('*', '[^.]*', $sourceKey) 

因为它会被preg_quote()逸出。

您可以添加

$wildcard = '.*'  

Str::is()的参数,并用'[^.]*'覆盖

答案 1 :(得分:0)

这是一个已知问题:https://github.com/laravel/framework/issues/22499

您可以通过交换消息来解决此问题:

$messages = [
    'elem.*.subitem.test.required' => 'sub item required',
    'elem.*.test.required' => 'top level item required'
];