我使用Laravel 5的Form Request Validation功能验证表单输入。
在我的表单中,我有两个字段num_adults
和num_children
。
我需要确保两个字段的总和不超过某个值。
我尝试过的是在我的验证文件的rules()
函数中,我使用merge()
人工添加了一个新的输入值,它是num_adults
和num_children
的总和。 $this->merge([
'max_persons' => $this->input('num_adults') + $this->input('num_children')
]);
。
$rules = [
'num_adults' => 'integer|max:2',
'num_children' => 'integer|max:1',
'max_persons' => 'integer|max:2',
];
然后在返回的规则数组中,
num_adults
验证适用于num_children
和max_persons
。但{{1}}似乎被忽略了。
答案 0 :(得分:2)
我可能会跳过数组合并并遵守我的规则:
$rules = [
'num_adults' => 'integer|max:'.(2-$this->get('num_children', 0)) ,
'num_children' => 'integer|max:'.(2-$this->get('num_adults', 0))
];
2是允许的最大值。
另一方面,您启动的方法可以让您更灵活地处理错误消息。
验证程序在更新阵列之前已经具有值,因此它不知道您的添加内容。您可以在请求对象中添加验证器方法,以便在此过程中稍早合并您的值。
public function validator(Factory $factory)
{
$this->merge([
'max_persons' => $this->input('num_adults') + $this->input('num_children')
]);
return $factory->make(
$this->all(),
$this->rules(),
$this->messages()
);
}