我有一个包含一些字段的表单,我想使用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验证文档:
所需 验证中的字段必须存在于输入数据中,而不是空的。字段被认为“空”是下列条件之一为真:值为null。该值是一个空字符串。该值是空数组或空可数对象。该值是一个上传的文件,没有路径。
我使用的是Laravel5.1,所以present
方法不可用。
发布于 2017-09-25 12:48:59
您的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',
]);
如果您的复选框值是整数,则可以将required
与integer
一起使用,如
$this->validate($req, [
'text_input' => 'required',
'select_input' => 'required|integer',
]);
或者,如果该复选框的选项有限,则可以使用
'select_input' => "required|in:val1,val2,val3",
发布于 2017-09-25 12:46:18
您禁用了它的选项,所以它不会通过您的表单发送任何内容。
将复选框更改为
<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>
发布于 2017-09-25 13:29:13
有几个选项我可以推荐:
https://stackoverflow.com/questions/46405564
复制相似问题