Livewire: Как я могу сбросить свойство объекта?

#php #laravel #laravel-livewire

Вопрос:

Я пытаюсь сделать что-то простое, используя этот reset() метод.

Моя url модель (объект) имеет title свойство, которое привязывается к полю ввода в моем блейде:

 <input
  type="text"
  wire:model.lazy="url.title"
  wire:keydown.escape="reset_fields"
  ...
 

В своей reset_fields функции я:

 public function reset_fields()
{
  $this->reset('url.title');
}
 

Ошибка, которую он отображает, такова:

 LivewireExceptionsPropertyNotFoundException
Property [$url.title] not found on component: [url-row]
 

Обходной путь, который я нашел, заключается в следующем:

 <input
  type="text"
  wire:model.lazy="title"
  wire:keydown.escape="reset_fields"
  ...
 

В компоненте, который у меня есть:

 ...
public $title;
...

public function mount() {
  $this->title = $this->url->title;
}

public function reset_fields() {
  $this->mount();
}
 

Так что да, это работает, но я думаю, что это не «правильный путь». Поэтому мой вопрос в том, как я использую этот reset() метод и можно ли его использовать с объектами

Ответ №1:

при прямой привязке к свойствам модели, таким как «url.title», вы должны объявить свойство модели в правилах, таких как

 public Url $url;
protected $rules = [
  'url.title' => 'required'
];
....
public function reset_fields()
{
   $this->url->title = null;
}

// blade
<input
  type="text"
  wire:model.lazy="url.title"
  wire:keydown.escape="reset_fields">