【问题标题】:Laravel 5.3 Form Request Validation required_if and min rulesLaravel 5.3 表单请求验证 required_if 和 min 规则
【发布时间】:2017-06-13 03:09:50
【问题描述】:

我在我的一个 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 规则会被完全忽略。如何确保验证按我的需要进行?

【问题讨论】:

  • "min" 是最小长度而不是最小值 ;)
  • 不正确:For numeric data, value corresponds to a given integer value

标签: laravel validation


【解决方案1】:

您可以在 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->validate()

【讨论】:

  • 我无法获取请求值。 IE,我需要做“'min_if' => ' :attribute 必须至少有 :min 项。”但它显示为“MyInput 必须至少有 :min 个项目。”。我也尝试过 :value 但到目前为止没有运气。有什么线索吗?
  • 您需要在您的Validator::extend();中添加$validator-&gt;addReplacer();
【解决方案2】:

我使用了@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;
        });
    }
    ....

【讨论】:

    猜你喜欢
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2017-07-08
    • 2017-12-06
    • 2021-07-22
    • 2018-06-26
    • 2015-06-09
    相关资源
    最近更新 更多