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

Ese*_*eth 5 php validation laravel laravel-5

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

public function postSomething(Request $req) {

    ...

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

    ...

}
Run Code Online (Sandbox Code Playgroud)

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

+request: ParameterBag {#42 ?
  #parameters: array:1 [?
    "text_input" => ""
    "_token" => "TCDqEi2dHVQfmc9HdNf8ju1ofdUQS6MtDBpUMkl7"
  ]
}
Run Code Online (Sandbox Code Playgroud)

如您所见,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>
Run Code Online (Sandbox Code Playgroud)

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

从Laravel 5.1验证文档:

需要

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

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

Sar*_*roj 5

您的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',
    ]);
Run Code Online (Sandbox Code Playgroud)

如果您的选择框值为整数,则可以required与integerlike一起使用

$this->validate($req, [
    'text_input' => 'required',
    'select_input' => 'required|integer',
]);
Run Code Online (Sandbox Code Playgroud)

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

'select_input' => "required|in:val1,val2,val3",
Run Code Online (Sandbox Code Playgroud)

  • 它确实可以在没有`disabled'属性且值为空的情况下工作。:) (2认同)