Почему пользовательская проверка в Laravel 5.6 не работает? - PullRequest
0 голосов
/ 29 апреля 2019

Я создал пользовательское правило с помощью php artisan make: rule, установил его в контроллере, но оно не работает. В чем может быть проблема?

class CheckDeliveryDate implements Rule
{
    public $client_id;
    private $is_after_midday;
    private $error_messge;

    public function __construct(int $client_id)
    {
        $this->client_id = $client_id;
        $this->is_after_midday = Carbon::now()->greaterThan(Carbon::now()->midDay());
        $this->error_messge = 'Error';
    }

    public function passes($attribute, $value)
    {
        $delivery_date = Carbon::parse($value);

        if ($delivery_date->isToday()) {
            $this->error_messge = 'Error';

            return false;
        }
        if ($delivery_date->endOfDay()->isPast()) {
            $this->error_messge = 'Error';

            return false;
        }

        return true;
    }

    public function message()
    {
        return $this->error_messge;
    }
}

В контроллере я установил правила метода:

public function rules($client_id)
{
    return [
        'orders.*.positions.*.delivery_time' => [
            'required',
            'date',
            new CheckDeliveryDate($client_id)
        ],
    ];
}

и когда я сохраняю свой заказ, validator-> fails () возвращает мне «false».

$validator = Validator::make(
    $request->all(),
    $this->rules($client_id)
);

Я пытался установить dd или dump в правиле, не работает. Где моя ошибка?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Неправильная дата формата JSON.Это удивительная ошибка ...

0 голосов
/ 29 апреля 2019

Как указано в документации laravel (https://laravel.com/docs/5.8/validation#custom-validation-rules), вы не должны передавать параметр в свой экземпляр пользовательского правила. Laravel сделает это за вас.

Таким образом:

new CheckDeliveryDate($client_id)

Становится:

new CheckDeliveryDate

Хорошего дня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...