#12 Laravel 5: Create - Добавление записи 2

Основы Laravel 5

Продолжаем тему добавление новой записи на нашем Laravel сайте.

По сути в метод create() мы передали некий, скажем так, хаотичный массив данных. Этот массив помимо нужных полей содержит 1) Не нужные поля - те поля которых нет в таблице posts ( "_token" ) 2) Поля с неверным содержимым - поле published у нас равно "on", а ожидается 1/0 (true/false). Соответственно Laravel не выполнил наш запрос и вывел ошибку.

Для того чтобы подобная операция завершилась успешно нам надо сообщить Laravel какие именно значения массива следует использовать. Для этого в модели Post запишем следующий код:

class Post extends Model {

    protected $fillable = ['title', 'slug', 'excerpt', 'content', 'published_at', 'published'];
...
}

Теперь Laravel знает какие поля нам нужны и только их и использует. И если мы попробуем добавить новую запись заполнив все поля верно (валидации у нас пока еще нет, по этому допустим идеальные условия), то запись добавится.

НО. Мы получим два недочета. 1) поле published у нас всегда будет 0 так как данные приходят не те которые нам нужны 2) Дата публикации будет без учета времени.

В Laravel есть возможность подмены входных параметров. То есть создается определенный метод который является промежуточным и в этом методе мы можем посмотреть что пришло и заменить на нужное значение. С помощью такого функционала мы решим две наши проблемы.

static function create(array $attributes)
{
    parent::create($attributes);
}

public function setPublishedAttribute($enabled)
{
    $this->attributes['published'] = empty($enabled) ? 0 : 1;
}

public function setPublishedAtAttribute($date)
{
    $this->attributes['published_at'] = Carbon::createFromFormat('Y-m-d', $date);
}

Метод обработчик должен именоваться следующим образом - set<ИмяАтрибута>Attribute(<переменная>);

Такми образом для поля published мы проверяем факт наличия того что вообще что-то пришло (как вы помните если поставить галку, то к нам приходит значение "on", если не поставить то вообще ничего), то устанавливаем значение атрибута в 1, а если ничего не пришло, то в 0;

Точно так же и добавляем время для даты публикации (устанавливаем текущее).

 

Добавить отзыв (пожелание, комментарий)