Атрибут углерода модели привязки Laravel Livewire

Я использую Laravel Livewire v2, и мне нужно привязать ввод даты формы к атрибуту модели Carbon в компоненте Backend Livewire, но это кажется невозможным для форматирования даты завершения.

Если быть более точным:

  • при выборе даты средство выбора даты в форме livewire выполняет вызов api, отправляя правильную дату (например: 2020-02-02)
  • компонент Livewire правильно получает и передает строковое значение модели
  • модель преобразует строку в объект Carbon и назначает ее атрибуту fillable.
  • компонент Livewire пытается отправить обратно клиенту данные, но он не выполняет формат ->format('Y-m-d') для объекта Carbon, поэтому отправляется сериализованный объект даты
  • когда объект несериализован, получает, например, 2012-12-25T20:30:00.000000+04:00 MSK
  • разрыв ввода даты

Я также обнаружил, что в Livewire v1 можно было преобразовывать свойства (ссылка) с использованием массива "ключ-значение" или пользовательских методов приведения, но это было удалено в версии 2 (ссылка); есть пример с _4 _ / _ 5_ методами для достижения того же эффекта, но этот пример охватывает случай свойства компонента, а не вложенного, как в моем случае.

Есть ли способ добавить опору даты модели или добавить формат при отправке данных обратно клиенту?


person fudo    schedule 25.09.2020    source источник


Ответы (1)


Обновление (2020-10-15)

Начиная с Livewire v2.3, модельное приведение теперь работает при непосредственной привязке к атрибутам модели (иначе wire:model).

Все, что вам нужно сделать, это перейти к вашей модели и указать дату, давайте возьмем модель Post в качестве примера:

class Post extends Model
{
    protected $casts = [
        'published_at' => 'date:Y-m-d'
    ];
}

Это позволит Livewire узнать, что ваше поле published_at должно быть сериализовано в формате Y-m-d для работы с ним на стороне клиента и для преобразования его обратно в экземпляр Carbon (DateTime) при каждом его обновлении.

Теперь вы можете безопасно прикрепить его к полю <input>:

<input type="date" wire:model="published_at" />

Старый ответ

В настоящее время существует ожидаемый PR, который направлен на решение этой проблемы для Livewire v2. Это очень поможет, если вы пойдете и поддержите его :)

https://github.com/livewire/livewire/pull/1665

person Jorge González    schedule 25.09.2020