Laravel 填充数组元素的验证规则

Posted

技术标签:

【中文标题】Laravel 填充数组元素的验证规则【英文标题】:Laravel filled validation rule for array element 【发布时间】:2018-04-13 02:30:15 【问题描述】:

如果至少有一个数组元素为空,我需要检查输入的字符串数组并发出警告。

使用以下规则:

return Validator::make($data, [
    'branches'         => 'array',
    'branches.*'       => 'filled|max:255'
    ]);

但是,填充规则似乎不起作用(而 min:1 工作正常)。 它应该与数组元素一起使用吗?

更新: 分支数组不是强制性的,但如果存在它应该包含非空元素。

更新: 终于在我的验证规则中发现了错误。 它应该看起来像

return Validator::make($data, [
    'branches'         => 'array',
    'branches.*.*'       => 'filled|max:255'
    ]);

因为输入数组是数组数组。现在填充的规则可以按预期使用我的输入数据。

【问题讨论】:

【参考方案1】:

使用 required 代替

return Validator::make($data, [
    'branches'         => 'required|array',
    'branches.*'       => 'required|max:255'
]);

来自文档:https://laravel.com/docs/5.5/validation#available-validation-rules

必填

验证中的字段必须存在于输入数据中,而不是 空的。如果出现以下情况之一,则该字段被视为“空” 条件为真:

值为 null。 该值为空字符串。 该值是一个空数组或空 Countable 对象。 该值为上传的文件,没有路径。

如果您只想在存在字段数据时验证数组,请使用filled。您可以将其与present 结合使用。

return Validator::make($data, [
    'branches'         => 'present|array',
    'branches.*'       => 'filled|max:255'
]);

填充

正在验证的字段在存在时不能为空。

呈现

验证中的字段必须存在于输入数据中,但可以为空。

【讨论】:

这些字段不是强制性的,但如果输入请求中存在,则不应为空。 @user947668 数组本身是否允许为空?使用'branches.*' => 'required|max:255',我在这里检查数组的每一行的字段是否为空。 @user947668 否则请改用filled【参考方案2】:

考虑到您的评论,您应该尝试nullable

return Validator::make($data, [
    'branches'         => 'nullable|array',
    'branches.*'       => 'nullable|max:255'
]);

您可以使用presentthis 将确保数组应该通过值或空数组传递

return Validator::make($data, [
    'branches'         => 'present|array',
    'branches.*'       => 'nullable|max:255'
]);

【讨论】:

以上是关于Laravel 填充数组元素的验证规则的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中验证数组时,如何使用数组项规则添加验证自定义消息?

验证数组中的 Laravel 嵌套规则

如果值存在于另一个字段数组中,Laravel 验证规则

使用带有附加参数的自定义规则验证 Laravel 中的数组

Laravel表单请求验证不适用于getValidatorInstance()

如何使唯一数组的自定义验证规则依赖于其他字段 laravel