【问题标题】:Laravel Validation Rules for Set minimum to 1 when default is 0当默认值为 0 时,将最小值设置为 1 的 Laravel 验证规则
【发布时间】:2019-10-14 14:34:38
【问题描述】:

我有这样的请求数组

{    
    "amenity_rates": [
        {
            "initial_hour": 1,
            "initial_hour_rate": 0,
            "succeeding_hours": 0,
            "is_default": 0,
            "default_rate": 0
        },
        {

            "initial_hour": 1,
            "initial_hour_rate": 0,
            "succeeding_hours": 0,
            "is_default": 0,
            "default_rate": 0
        }
    ]
}

如果符合我的要求,现在这个

$rules =[
    'amenity_rates'                     => 'required|array',
    'amenity_rates.*.initial_hour'      => 'required_if:amenity_rates.*.is_default,0|numeric',
    'amenity_rates.*.initial_hour_rate' => 'required_if:amenity_rates.*.is_default,0|numeric',
    'amenity_rates.*.succeeding_hours'  => 'required_if:amenity_rates.*.is_default,0|numeric',
    'amenity_rates.*.is_default'        => 'required|in:0,1',
    'amenity_rates.*.default_rate'      => 'required_if:amenity_rates.*.is_default,1|numeric'
];

问题是,如果 is_default 为 0,我想设置此 field('initial_hour','initial_hour_rate','succeeding_hours') 的最小值,当我设置 min:1 时,如果 is_default 为 0 或 1,它们会抛出错误。

【问题讨论】:

标签: laravel laravel-5.7 laravel-validation


【解决方案1】:

您可以使用custom validation rule

首先在命令行中运行它

php artisan make:rule MinIfDefaultIsZero

您会在app/Rules 文件夹中找到一个名为MinIfDefaultIsZero.php 的文件

您需要创建一个构造函数来传递is_default,然后在passes() 中对其进行验证

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class MinIfDefaultIsZero implements Rule
{
    private $is_default;

    public function __constructor($is_default){
      $this->is_default = $is_default;
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        if($this->is_default == 0) {
            return $value > 1;
        }

        return true;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute must be more than 1.';
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 2023-04-01
    • 2019-06-08
    • 2021-04-18
    • 1970-01-01
    • 2017-01-16
    • 2017-08-17
    • 1970-01-01
    相关资源
    最近更新 更多