Laravel 中禁止的验证规则
发布于 作者: Paul Redmond
Laravel 8 现在有三个用于禁止字段的验证规则,包括 prohibited_if
、prohibited_unless
和 prohibited
。让我们通过一些示例来了解 prohibited*
验证规则在哪些情况下可能有用,并更详细地了解每个规则。
禁止 if 和 unless
Jess Archer 贡献了在 Laravel Laravel 8.32 中发布的禁止 if/unless 验证规则。 "禁止" 验证规则的基本思想是,如果另一个字段存在,则禁止给定字段具有数据,或者应该完全禁止字段在请求中出现。
以下是 Jess 在此功能的 pull request 中提供的示例,它完美地说明了如何使用此规则来明确防止矛盾的输入。
Validator::validate([ 'is_deceased' => false, 'date_of_death' => '2021-03-09'], [ 'date_of_death' => 'prohibited_unless:is_deceased,true']);
另一个示例可能是有人接受服务条款但被识别为未成年人。也许应用程序需要家长注册才能代表他们同意。
Validator::validate([ 'is_minor' => true, 'tos_accepted' => true], [ 'tos_accepted' => 'prohibited_if:is_minor,true']);
禁止验证规则
在 Laravel 8.32 之后,Philo Hermans 在 Laravel 8.34 中贡献了一个 prohibited
规则,它确保在验证时输入不存在。
// PUT /api/licenses/123-456// {"name":"hello-world", "key":"random-key"} $validated = $request->validate([ 'name' => 'required|max:255', 'key' => 'prohibited',]); // Response: 422// The key field is prohibited
以上是一个很好的例子,用户可能希望通过向资源发送 PUT 请求来更新 API key
。在典型的应用程序中,该字段在请求期间很可能被忽略。但是,成功的响应可能会导致用户认为他们能够更新密钥,而实际上 API 忽略了它。prohibited
规则将明确表示此字段不允许使用,并且被认为是不可变的。
了解更多
可用验证规则列表 是一个很好的资源,可以查看可用的规则以及如何使用它们。
如果你遇到内置规则不完全符合你的需求的情况,你总是可以选择使用 自定义验证对象 来创建自定义验证规则。
Laravel 有广泛的 验证文档,可以帮助你了解有关验证用户输入的所有内容。此外,如果你不熟悉 Laravel,Laracasts 有一个 表单验证要点 视频(很可能很快就会更新到 Laravel 8),它将帮助你直观地了解验证是如何工作的。