Пользовательская проверка не работает в Laravel 5.4 - PullRequest
0 голосов
/ 28 января 2019

Работа над приложением Laravel, посредством которого я работаю над проверкой серверной части двух дат.2 даты - это, в основном, даты вылета и возврата соответственно.

На дату отъезда я пытаюсь подтвердить, что она обязательна, должна иметь тип даты и должна быть датой после сегодняшнего дня.В день возвращения я также пытаюсь реализовать логику проверки, при которой дата возвращения должна быть через 3 дня или более после даты отъезда, но должна быть менее 180 дней после даты отъезда.

Функция проверки

 public function validateDates(Request $request){   
        //dd($request->all());
     $now = new \DateTime();

    $after_date = $now->parse($this->departureDate)->addDays(3);
    $maxdays = $now->parse($this->departureDate)->addDays(180);

        $validation = $this->validate($request, [
          'departureDate' => 'required|date|after:now',
          'returnDate' => 'required|date_format:"Y-m-d"|after:' . $after_date->toDateString().'|before:' . $maxdays->toDateString()
        ], 
        [
            'departureDate.after' => 'Your departure date should be tomorrow or any date in the future',
           'returnDate.after' => 'Your return date should be 3 or more days after the departure date',
           'returnDate.before' => 'Your return date should be no more than 180 days from the departure date',
        ]
    };

1 Ответ

0 голосов
/ 28 января 2019

Я думаю, что ваша логика в порядке.Однако вы, вероятно, хотите использовать вместо него Carbon .Он имеет метод parse(), который вы ищете.Также addDays() и toDateString().

Итак, в верхней части файла добавьте следующее утверждение:

use Carbon\Carbon; 

, а затем измените свой метод validateDate() на этот:

public function validateDates(Request $request)
{   
    $after_date = Carbon::parse($this->departureDate)->addDays(3)->toDateString();
    $max_days   = Carbon::parse($this->departureDate)->addDays(180)->toDateString();

    $validation = $this->validate($request, 
        [
            'departureDate' => 'required|date|after:now',
            'returnDate'    => 'required|date_format:"Y-m-d"|after:' . $after_date . '|before:' . $max_days
        ], 
        [
            'departureDate.after' => 'Your departure date should be tomorrow or any date in the future',
            'returnDate.after'    => 'Your return date should be 3 or more days after the departure date',
            'returnDate.before'   => 'Your return date should be no more than 180 days from the departure date',
        ]
    );
};

Я предполагаю, что у вас где-то определена дата вылета и, следовательно, вы используете $this->departureDate, но если вместо этого он исходит из вашего запроса, вы должны изменить его, например, на $request->departureDate.

...