Laravel 5.3 表单请求验证 required_if 和最小规则

maz*_*dlx 0 validation laravel

我在我的 Laravel 项目之一中使用表单请求验证,并且想要验证country_id,但前提是bak_leafletist 设置为 0。在我的项目中,FormRequestFile我有以下规则:

public function rules()
{
    return [
        ...
        'country_id' => 'required_if:bak_leaflet,0',
        ...
    ];
}
Run Code Online (Sandbox Code Playgroud)

这绝对没问题,但是当bak_leafletis时0,thencountry_id也需要大于 1:

public function rules()
{
    return [
        ...
        'country_id' => 'required_if:bak_leaflet,0|min:1',
        ...
    ];
}
Run Code Online (Sandbox Code Playgroud)

然而,这条min:1规则被完全忽略了。如何确保验证按照我的需要进行?

Avi*_*yan 5

您可以在 AppServiceProvider 的 boot() 方法中添加验证扩展程序,如下所示:

\Validator::extend('min_if', function ($attribute, $value, $parameters, $validator) {
    $data = $validator->getData();
    if (isset($data[$parameters[0]]) && $data[$parameters[0]] == $parameters[1] && (int)$value < $parameters[2]) {
        return false;
    }

    return true;
});
Run Code Online (Sandbox Code Playgroud)

然后像这样编写验证规则:

'country_id' => 'required_if:bak_leaflet,0|min_if:bak_leaflet,0,1',
Run Code Online (Sandbox Code Playgroud)

此外,您还需要添加

'min_if'          => 'Your validation message',
Run Code Online (Sandbox Code Playgroud)

进入resources/lang/en/validation.php或传递给你的$this->validate()作为第三个参数