如果依赖字段无效,如何停止验证字段? - 拉拉维尔

问题描述 投票:0回答:2

我正在尝试根据另一个字段的有效性来验证一个字段,但似乎找不到答案。要么是我在搜索方面太愚蠢,要么是它的痛苦显而易见,但我无法找到令人满意的答案,所以在这里提问。

我有一个表格,我在其中创建了一个

unit
unit
属于
block
block
属于
class
。在我的表单中,我有一些字段可以选择
class
,然后选择该
block
class
。我想要实现的是验证
block
,我的规则如下所示。

"block_id" => 'required|integer|min:1|exists:blocks,id,class_id,'.$request->input('class_id'),

class_id
在此规则之前正在验证,如下所示

"class_id" => 'required|integer|min:1|exists:classes,id',

我想要实现的是,如果

block_id
无效,则停止验证
class_id

如果

class_id
无效,我也可以完全停止验证,因为我已经从前端验证字段。这是额外的安全层。所以我不关心用户体验(因为普通用户不会发布无效数据)。

我怎样才能实现这个目标?

我的第一个猜测是首先验证

class_id

$request->validate([
    "class_id" => 'required|integer|min:1|exists:classes,id'
]);

然后执行剩余的验证规则。但随后我将不得不两次验证请求(不知道这是否重要)。

是否有一个简单的解决方案,例如

$request->validate($rules, halt on first failure = true)
之类的选项?我的直觉告诉我应该有一个,但我找不到它。

提前致谢:)

PS:几周前我确实问过这个问题,但没有得到回复,所以重新发布看看这里是否真的有答案

laravel laravel-validation
2个回答
0
投票

您正在寻找的规则称为

bail
:

第一次验证失败后停止运行验证规则。


0
投票

有点晚了,但万一它对任何人有帮助:

您可以将所有验证放入 FormRequest 中,并将 FormRequest 的属性

$stopOnFirstFailure
设置为 true

class YourFormRequest extends FormRequest
{

    protected $stopOnFirstFailure = true;

    ....
    ....
    ....
}

© www.soinside.com 2019 - 2024. All rights reserved.