Разница в валидации Laravel между 2 датами - PullRequest
0 голосов
/ 10 июня 2019

Мне нужно проверить некоторые специальные проверки в моем хранилище действий.

public function store(Request $request) { 

    $this->validate($request, [
        'practice'=>'required|max:100',
        'project'=>'required',
        'work_place'=>'required',
        'telephone_1'=>'required',
        'date_recurring_for_beginning' => 'required|date',
        'date_recurring_for_end' => 'required|date|after_or_equal:date_recurring_for_beginning',
        ]);

    RequestCollaborator::create($request->all());

    return redirect()->route('requestsCollaborator.index')
        ->with('flash_message',
            trans('request.request_created'));
}

Мне нужно проверить, если разница между date_recurring_for_beginning и date_recurring_for_end составляет 3 месяца?

есть какое-то решение для выполненияэто или я должен создать пользовательскую проверку?

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Вы можете использовать Validator::extend() и создать собственное правило проверки. Как

Validator::extend('valid_date_range', function ($attribute, $value, $parameters, $validator) {

    $dateBeginning = \Carbon::createFromFormat('Y-m-d', $parameters[0]); // do confirm the date format.

    $dateEnd = \Carbon::createFromFormat('Y-m-d', $value);

    return $dateBeginning->diffInMonths($dateEnd) == $parameters[1];
});

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

'date_recurring_for_end' => 'required|date|valid_date_range:date_recurring_for_beginning,3'

Для получения более подробной информации о пользовательской проверке. Пожалуйста, следуйте документации.

https://laravel.com/docs/5.8/validation

0 голосов
/ 10 июня 2019

Создайте пользовательское правило проверки в вашем app/Providers/AppServiceProvider:

public function boot()
{
    Validator::extend('date_difference', function ($attribute, $value, $parameters, $validator) {
        $firstDate = Carbon::parse($parameters[0]);
        $secondDate = Carbon::parse($parameters[1]);
        $minDifference = (int)$parameters[2];
        if($firstDate->diffInMonths($secondDate) < $minDifference)
            return false;
        return true;
    });
}

Чтобы использовать это правило:

$this->validate([
    'some_field' => 'date_difference:date_one,date_two,3',
]);

Надеюсь, это поможет.

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