我正在尝试根据另一个字段的有效性来验证一个字段,但似乎找不到答案。要么是我在搜索方面太愚蠢,要么是它的痛苦显而易见,但我无法找到令人满意的答案,所以在这里提问。
我有一个表格,我在其中创建了一个
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:几周前我确实问过这个问题,但没有得到回复,所以重新发布看看这里是否真的有答案
有点晚了,但万一它对任何人有帮助:
您可以将所有验证放入 FormRequest 中,并将 FormRequest 的属性
$stopOnFirstFailure
设置为 true。
class YourFormRequest extends FormRequest
{
protected $stopOnFirstFailure = true;
....
....
....
}