Подтвердите дату в Laravel на 6 дней после другого поля даты - PullRequest
0 голосов
/ 29 октября 2018

Я работаю над полем формы Laravel и добавил 2 поля ввода даты (дата отъезда и дата возвращения). Я пытаюсь создать пользовательскую проверку бэкэнда в Laravel, в соответствии с которой дата отъезда должна быть позже, а дата возврата должна быть через 6 дней после даты отъезда. Пожалуйста, помогите?

Параметры проверки

'departure_date' => 'required|date|after:now',

//Must be 6 days after departure date
'return_date' => 'required|date|after:departure_date + 6 day',

Логика проверки Я использую

//Added at the top of the controller
use Illuminate\Foundation\Http\FormRequest;

//Controller code
  public
    function validatePlanEntries(Request $request)
    {   
        $validation = $this->validate($request, [
            'departure_date' => 'required|date|after:now',

            //Must be 6 days after departure date
            'return_date' => ['required', 'date', function ($attribute, $value, $fail) {
                        if (strtotime($value) < strtotime(request('departure_date')) + 518400) {
                            $fail('Departure date invalid');
                        }
                    }
            ]
        ]
    }

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вы можете использовать решение Closure.

$validator = \Validator::make($request->all(), [
    'departure_date' => 'required|date|after:now',

    //Must be 6 days after departure date
    'return_date' => ['required', 'date', function ($attribute, $value, $fail) {
                if (strtotime($value) < strtotime(request('departure_date')) + 518400 /* 6*24*60*60 */) {
                    $fail('Departure date invalid');
                }
            }
        ],
    ]
);

EDIT

Вам не нужно добавлять FormRequest сверху, и вам не хватает трещины в вашем коде.

function validatePlanEntries(Request $request)
{
    $validator = \Validator::make($request, [
        'departure_date' => 'required|date|after:now',

        //Must be 6 days after departure date
        'return_date' => ['required', 'date', function ($attribute, $value, $fail) {
            if (strtotime($value) < strtotime(request('departure_date')) + 518400) {
                $fail('Departure date invalid');
            }
        }]
    ]);
    if ($validator->fails()) {
        //return errors in $validation->error();
    }
    //else continue
}
0 голосов
/ 29 октября 2018

используйте это

$date = Carbon\Carbon::parse($date_from);
$sixdays = $date->addDays(6);

и установите это правило

$rule['return_date'] = 'required|date|before:'.$sixdays
$message['return_date.before'] = 'This field is must before 6 days of starts date';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...