Метод pull
Метод pull класса Component извлекает данные из запроса (чаще всего из формы)
и заполняет соответствующие публичные свойства компонента Livewire.
В метод передаётся массив ключей, которые соответствуют именам полей ввода,
а также названиям свойств компонента. После выполнения метода свойства компонента
обновляются полученными значениями, а шаблон перерисовывается автоматически.
Это удобный способ импортировать данные формы в компонент без ручного присваивания
каждого свойства.
Синтаксис
<?php
$this->pull(['field1', 'field2', 'field3']);
?>
Также можно передать ассоциативный массив для переименования ключей при извлечении:
<?php
$this->pull([
'input_name' => 'property_name',
'user_email' => 'email'
]);
?>
В этом случае значение из поля input_name попадёт в свойство property_name,
а значение из user_email - в свойство email.
Пример
Пусть у нас есть компонент с публичными свойствами $name, $email и $age.
В методе submit используем pull для заполнения этих свойств из запроса:
<?php
namespace AppLivewire;
use LivewireComponent;
class UserProfile extends Component
{
public $name = '';
public $email = '';
public $age = 0;
public function submit()
{
$this->pull(['name', 'email', 'age']);
// свойства $name, $email и $age теперь содержат данные из запроса
}
public function render()
{
return view('livewire.user-profile');
}
}
?>
<form wire:submit="submit">
<input type="text" wire:model="name" placeholder="Имя">
<input type="email" wire:model="email" placeholder="Email">
<input type="number" wire:model="age" placeholder="Возраст">
<button type="submit">Отправить</button>
</form>
<div>
<p>Имя: {{ $name }}</p>
<p>Email: {{ $email }}</p>
<p>Возраст: {{ $age }}</p>
</div>
После отправки формы метод pull заполнит свойства компонента
значениями из полей ввода, и они отобразятся в шаблоне.
Пример
Используем ассоциативный массив для извлечения данных с переименованием ключей.
Поля в форме имеют имена user_name и user_email, а свойства компонента
называются $name и $email:
<?php
namespace AppLivewire;
use LivewireComponent;
class UserProfile extends Component
{
public $name = '';
public $email = '';
public function submit()
{
$this->pull([
'user_name' => 'name',
'user_email' => 'email'
]);
}
public function render()
{
return view('livewire.user-profile');
}
}
?>
<form wire:submit="submit">
<input type="text" name="user_name" wire:model="name" placeholder="Имя">
<input type="email" name="user_email" wire:model="email" placeholder="Email">
<button type="submit">Отправить</button>
</form>
<div>
<p>Имя: {{ $name }}</p>
<p>Email: {{ $email }}</p>
</div>
Теперь значения из полей user_name и user_email будут извлечены
и сохранены в свойства $name и $email соответственно.
Пример
Если нужно извлечь только часть данных из запроса, можно комбинировать
pull с другими методами, например, only. Однако pull сам
позволяет выбрать только нужные ключи:
<?php
namespace AppLivewire;
use LivewireComponent;
class UserProfile extends Component
{
public $name = '';
public $email = '';
public $age = 0;
public $city = '';
public function submit()
{
// извлекаем только name и email
$this->pull(['name', 'email']);
}
public function render()
{
return view('livewire.user-profile');
}
}
?>
<form wire:submit="submit">
<input type="text" wire:model="name" placeholder="Имя">
<input type="email" wire:model="email" placeholder="Email">
<input type="number" wire:model="age" placeholder="Возраст">
<input type="text" wire:model="city" placeholder="Город">
<button type="submit">Отправить</button>
</form>
<div>
<p>Имя: {{ $name }}</p>
<p>Email: {{ $email }}</p>
<p>Возраст: {{ $age }}</p>
<p>Город: {{ $city }}</p>
</div>
После выполнения метода pull свойства $name и $email будут обновлены,
а $age и $city останутся без изменений.