我有一个包含某些字段的表单,我想使用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。 该值为空字符串。 该值为空数组或空Countable对象。 该值是没有路径的上载文件。
P.S。我正在使用Laravel 5.1,因此present
方法不可用。
答案 0 :(得分:3)
你的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",
答案 1 :(得分:1)
您已禁用该选项,因此无法通过您的表单发送任何内容。
将您的选择框更改为
<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>
答案 2 :(得分:1)
我可以推荐的选项很少:
手动验证请求,而不使用Controller中扩展的验证,即:
//validator FACADE
$ validator = Validator::make ($request->all(), [
// rules here
]);
通过这种方式,您可以监控哪些字段已通过,哪些字段未通过。
其次,为选择列表设置默认值,并在Controller中验证时检查该值,也就是说,如果您具有此默认值,则不选择任何内容。您肯定只会在控制器中提交字段。