首页 文章

如果未选择任何选项,Laravel将忽略选择输入验证

提问于
浏览
5

我有一个包含一些字段的表单,我想使用Laravel的 validate() 方法进行验证 .

public function postSomething(Request $req) {

    ...

    $this->validate($req, [
        'text_input' => 'required',
        'select_input' => 'required'
    ]);

    ...

}

问题是,如果提交表单而未从select输入中选择一个选项,则会在请求中忽略该表单,并且Laravel不会对其进行验证,尽管它已使用 required 验证规则添加到规则集中 . 正在验证空文本输入 .

+request: ParameterBag {#42 ▼
  #parameters: array:1 [▼
    "text_input" => ""
    "_token" => "TCDqEi2dHVQfmc9HdNf8ju1ofdUQS6MtDBpUMkl7"
  ]
}

如您所见,如果请求参数为空,则缺少 select_input .

这是我的选择输入的HTML代码:

<select class="form-control" name="select_input">
    <option disabled selected>Please select...</option>
    <option value="val1">Value 1</option>
    <option value="val2">Value 2</option>
</select>

有没有办法使规则集中的所有字段的验证工作,即使它们中的某些字段不在请求中?

从Laravel 5.1验证文档:

required验证字段必须存在于输入数据中,而不是空的 . 一个字段被认为是“空”是下列条件之一为真:该值为空 . 该值为空字符串 . 该值为空数组或空Countable对象 . 该值是没有路径的上载文件 .

附:我正在使用Laravel 5.1,所以 present 方法不可用 .

3 回答

  • 1

    你的HTML应该是这样的

    <select class="form-control" name="select_input">
        <option value="" selected >Please select...</option>
        <option value="val1">Value 1</option>
        <option value="val2">Value 2</option>
    </select>
    
    $this->validate($req, [
            'text_input' => 'required',
            'select_input' => 'required',
        ]);
    

    如果您的选择框值是整数,那么您可以使用 requiredinteger 之类的

    $this->validate($req, [
        'text_input' => 'required',
        'select_input' => 'required|integer',
    ]);
    

    或者,如果您对该选择框的选项有限,则可以使用

    'select_input' => "required|in:val1,val2,val3",
    
  • 3

    您禁用了该选项,因此它不会通过您的表单发送任何内容 .

    将您的选择框更改为

    <select class="form-control" name="select_input">
        <option value="">Please select...</option>
        <option value="val1">Value 1</option>
        <option value="val2">Value 2</option>
    </select>
    
  • 1

    我可以推荐的选项很少:

    • 在不使用Controller中扩展的验证的情况下手动验证请求,即:
    //validator FACADE
    $ validator = Validator::make ($request->all(), [
        // rules here
    ]);
    

    通过这个,您可以监视传递哪些字段以及哪些字段未传递 .

    • 其次,为选择列表设置默认值,并在Controller中验证时检查该值,也就是说,如果您具有此默认值,则不选择任何内容 . 您肯定只有Controller中提交的字段 .

相关问题