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

时间:2017-01-27 12:22:26

标签: laravel validation

我在我的一个Laravel项目中使用表单请求验证,并希望验证country_id,但仅当bak_leaflet设置为0.在我的FormRequestFile中,我有以下规则:

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

这非常正常,但当bak_leaflet0时,country_id也需要大于1:

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

但是,min:1规则会被完全忽略。我怎样才能确保验证工作方式符合我的要求?

2 个答案:

答案 0 :(得分:3)

您可以在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;
});

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

'country_id' => 'required_if:bak_leaflet,0|min_if:bak_leaflet,0,1',

此外,您还需要添加

'min_if'          => 'Your validation message',

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

答案 1 :(得分:1)

我已经使用了@ avik-aghajanyan的答案,并将该方法添加到我的表单请求文件中,如下所示:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Factory as ValidationFactory;

class StoreArticle extends FormRequest
{
    public function __construct(ValidationFactory $validationFactory)
    {
        $validationFactory->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;
        });
    }
    ....