我创建了一个包含以下字段的表单:
如果用户选择一个有州(例如美国)的国家,则该表格将转换为:
为了验证这一点,我创建了一个单独的表单请求,如下所示:
public function rules()
{
return [
'name' => 'required|max:255',
'email' => 'required|email,
'country_id' => 'required|integer',
'state_id' => 'nullable|integer',
'city_id' => 'required|integer',
'address' => 'required',
];
}
问题在于,如果我这样保留,那么如果我不选择状态,它将通过验证。
如果我做到了:
'state_id' => 'sometimes|nullable|integer',
然后再次通过验证。
如果我做到了:
'state_id' => 'required|nullable|integer',
它不会通过验证,但是如果表单中没有状态字段,它将再次引发验证错误。
我阅读了很多有关此的文章,但似乎没有什么可以解决。
PS1 :我想在表单请求中解决此问题,而不是在控制器中解决。我认为
if($request->has('states')){...}
可以提供帮助,但再次,我想让表单请求中的内容保持整洁。
PS2 :我正在使用VueJS和Axios从表单添加/删除状态。整个表单实际上是Vue组件。
有任何线索吗?
提前谢谢!
答案 0 :(得分:2)
您可以通过sometimes
上的Validator
方法有条件地添加规则。
$v->sometimes('state_id', 'required|integer', function ($input) {
return in_array($input->countries, [1,2,3,4...]
});
您可以使用required_with
行参数,但是由于验证是基于输入的值而不是仅基于状态,因此自定义验证规则可能是最好的选择。
每https://laravel.com/docs/5.7/validation#conditionally-adding-rules