【发布时间】:2018-03-06 10:39:44
【问题描述】:
我有一个包含一些字段的表单,我想使用 Laravel 的 validate() 方法进行验证。
public function postSomething(Request $req) {
...
$this->validate($req, [
'text_input' => 'required',
'select_input' => 'required'
]);
...
}
问题是,如果表单在没有从选择输入中选择选项的情况下提交,它会在请求中被忽略,并且 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 验证文档:
必填
验证中的字段必须存在于输入数据中且不能为空。一个字段被认为是“空的”是以下条件之一为真: 该值为空。 该值是一个空字符串。 该值是一个空数组或空 Countable 对象。 该值是一个没有路径的上传文件。
附:我使用的是 Laravel 5.1,所以 present 方法不可用。
【问题讨论】:
-
显示您的 HTML 代码
-
这无济于事,因为
null输入不包含在请求正文中是一种预期行为。无线电输入和复选框也会发生这种情况。 -
显示您的刀片模板。
-
将
value=""添加到<option disabled selected>Please select...</option>并且您的规则应类似于'select_input' => 'required|in:val1,val2';) -
@Maraboc 我之前尝试过,但似乎该字段的任何验证都被忽略了,因为它不存在于请求参数中。似乎只有 Laravel 5.2 中的
present验证方法可以工作,但不幸的是我无法将项目升级到较新的版本,因为我需要更改很多东西......
标签: php laravel validation laravel-5