Laravel 5验证 - 验证2个字段的总和

时间:2015-12-04 03:23:04

标签: laravel-5.1

我使用Laravel 5的Form Request Validation功能验证表单输入。

在我的表单中,我有两个字段num_adultsnum_children

我需要确保两个字段的总和不超过某个值。

我尝试过的是在我的验证文件的rules()函数中,我使用merge()人工添加了一个新的输入值,它是num_adultsnum_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_childrenmax_persons。但{{1}}似乎被忽略了。

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()
    );
}