Laravel Validation Rules для Установите минимум на 1, когда по умолчанию 0 - PullRequest
1 голос
/ 29 мая 2019

У меня есть такой массив запросов

{    
    "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'
];

Вопрос в том, что я хочу установить минимум этого field('initial_hour','initial_hour_rate','succeeding_hours'), если is_default равно 0, когда я установил min:1, они выдают ошибку, если is_default равно 0 или 1.

1 Ответ

0 голосов
/ 29 мая 2019

Вы можете использовать пользовательское правило проверки

, сначала запустите его в командной строке

php artisan make:rule MinIfDefaultIsZero

Вынайдет файл с именем MinIfDefaultIsZero.php в папке app/Rules

Вам необходимо создать конструктор, который передаст 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.';
    }
}
...