Правило валидации date_format в Laravel
Предположи, что у нас есть две даты: одна - это дата начала события, а другая дата окончания. Помимо правильного формата, который для нас естественно очень важно, нужно позаботится о том, что бы дата окончания не оказалось раньше даты начала события. Итак вот правила валидации в реквест-объекте StoreEventRequest и/или UpdateEventRequest:
public function rules() {
return [
'started_at' => 'date_format:Y/m/d|before:today',
'finished_at' => 'date_format:Y/m/d|after:started_at',
];
}
Устанавливаем формат приёма даты из формы: Y/m/d
. С помощью правил after и before по сути мы делаем сразу несколько вещей: обеспечиваем ограничение даты начала сегодняшнем днём, и не даём дате окончания вылезти за пределы даты начало, что было бы абсурдно.
P.S. Что бы правильно обработать такой формат как Y/m/d
нужно использовать метод createFromFormat() библиотеки Carbon.
public function setStartedAtAttribute($value)
{
$this->attributes['started_at'] = Carbon::createFromFormat('Y/m/d', $value);
}
public function setFinishedAtAttribute($value)
{
$this->attributes['finished_at'] = Carbon::createFromFormat('Y/m/d', $value);
}
И не забываем указать принадлежность полей started_at и finished_at к Carbon date в модели:
protected $dates = ['started_at', 'finished_at'];