用于数组验证的 Laravel 自定义属性名称

Vin*_*rat 5 validation laravel

在复杂的形式中,我们需要为数组构建一些验证规则,这些规则应该仅在基于每个项目数据的某些复杂逻辑上触发。

\n

数组验证的定义方式通常是这样的

\n
   $validator->sometimes(\n      "items.*.level",\n      \'required|int|min:0\',\n      fn($formData) => /* $formData is the whole form data, not for the current item */\n   );\n
Run Code Online (Sandbox Code Playgroud)\n

然而,如上所示,确定何时触发这些规则的闭包对于表单数据是全局的,而不是对于项目的数据。

\n

因此,我们动态地为每个项目添加规则,如下所示:

\n
foreach ($formData as $itemId => $itemData) {\n   $validator->sometimes(\n      "items.$itemId.level",\n      \'required|int|min:0\',\n      fn() => $itemData[\'type\'] === 123 && $itemData[\'category\'] > 30\n   );\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我们必须这样做,因为据我所知,无法定义仅查看相应项目数据的有时规则。

\n

一切都很好。我们遇到的一个问题是验证消息的翻译。我们在validation.php文件中有:

\n
\'attributes\' => [\n    \'items.*.level\' => \'Niveau\',\n]\n
Run Code Online (Sandbox Code Playgroud)\n

那不会被拾取。显示的消息仍然是 \xc2\xab 字段 items.12.level 是必需的 \xc2\xbb 而不是 \xc2\xab 字段 Niveau 是必需的 \xc2\xbb 。

\n

有什么方法可以让验证器选择最接近的匹配属性名称并让*占位符按其应有的方式运行吗?

\n