Header Image

Валидация формата даты в Laravel

Загружено/обновлено 23 Ноября 2016

Правило валидации 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'];