Laravel 有时 vs 有时|需要

Posted

技术标签:

【中文标题】Laravel 有时 vs 有时|需要【英文标题】:Laravel sometimes vs sometimes|required 【发布时间】:2016-06-20 17:56:59 【问题描述】:

在 Laravel 验证中 sometimes|required|emailsometimes|email 有什么区别?我读过 this discussion from laracasts 但对我来说仍然模棱两可

【问题讨论】:

【参考方案1】:

来自文档:

在某些情况下,您可能希望针对 仅当该字段存在于输入数组中时。要快速 完成此操作,将有时规则添加到您的规则列表中

https://laravel.com/docs/5.2/validation#conditionally-adding-rules

如果我可以简化它,我会说sometimes 的意思是,如果该字段出现在请求中,则仅应用其余的验证规则。想象一下sometimes 就像一个 if 语句,在应用任何规则之前检查请求/输入中是否存在该字段。

当我在页面上有一些 javascript禁用一个字段时,我会使用此规则,因为当一个字段被禁用时,它不会显示在请求中。如果我简单地说required|email,验证器将始终应用规则,而使用sometimes 规则将仅在字段出现在请求中时应用验证!希望这是有道理的。

例子:

input: []
rules: ['email' => 'sometimes|required|email']
result: pass, the request is empty so sometimes won't apply any of the rules

input: ['email' => '']
rules: ['email' => 'sometimes|required|email']
result: fail, the field is present so the required rule fails!

input: []
rules: ['email' => 'required|email']
result: fail, the request is empty and we require the email field!

【讨论】:

谢谢。据我了解,sometimes 指的是 POST 键,require 指的是它的值。所以如果需要一个字段,则键和值都应该出现在 POST 中。对吗? 您实际上可以将验证过程应用于任何旧数组,因此它可能是POSTGET。是的,这实际上是一种很好的解释方式。您当然可以结合sometimesrequired 规则。如果您想进一步了解它在框架中的工作原理,您可以随时查看源代码:github.com/laravel/framework/blob/5.2/src/Illuminate/Validation/… 和测试:github.com/laravel/framework/blob/5.2/tests/Validation/…

以上是关于Laravel 有时 vs 有时|需要的主要内容,如果未能解决你的问题,请参考以下文章

laravel 缓存清除有时不起作用

Laravel 社交名流:InvalidStateException(有时)

Laravel 更新有时使用 'INSERT' SQL

Laravel 的工匠有时拒绝在 Homestead 工作

Laravel:有时规则不适用于输入类型=文件

Laravel 有时显示 404 not found 页面