Laravel 验证不允许全部为 false

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

我是 Laravel 框架的初学者。

我正在努力声明请求数据的验证。

我的表单中有一些复选框,并且必须至少选中其中一个复选框才能提交到数据库。

<input type="hidden" name="has_a_type" value="0">
<input type="checkbox" name="has_a_type" value="1">
<input type="hidden" name="has_b_type" value="0">
<input type="checkbox" name="has_b_type" value="1">
<input type="hidden" name="has_c_type" value="0">
<input type="checkbox" name="has_c_type" value="1">
<input type="hidden" name="has_d_type" value="0">
<input type="checkbox" name="has_d_type" value="1">
<input type="hidden" name="has_e_type" value="0">
<input type="checkbox" name="has_e_type" value="1">
<input type="hidden" name="has_f_type" value="0">
<input type="checkbox" name="has_f_type" value="1">
public function store(Request $request) {
    $request = $request->validate([
        'form_id' => 'required',
        'first_name' => 'required',
        'last_name' => 'required',
        'email' => 'required',
        'has_a_type' => 'required',
        'has_b_type' => 'required',
        'has_c_type' => 'required',
        'has_d_type' => 'required',
        'has_e_type' => 'required',
        'has_f_type' => 'required',
    ]);
}

用户提交表单时,必须至少选择一种表单类型。 我怎样才能做到这一点?

我可以通过在验证代码下添加以下代码来检查。

if (!($request['has_a_type'] || $request['has_b_type'] || $request['has_c_type'] || $request['has_d_type'] || $request['has_e_type'] || $request['has_f_type'])) {
    return ...->withError();
}

但我想知道有没有办法在验证中检查这一点。

谢谢你。

laravel laravel-validation
1个回答
0
投票

搜索文档,我看到了 required_without_all 规则,这可能就是您所需要的。

required_without_all:foo,bar,...

仅当所有其他指定字段都为空或不存在时,验证字段必须存在且不为空。

您可以在

bar,...
参数列表中指定其他复选框,例如

    'has_a_type' => 'required_without_all', 'has_b_type', 'has_c_type' ... 
© www.soinside.com 2019 - 2024. All rights reserved.