Метод boot
Метод boot является частью жизненного цикла компонента Livewire.
Он вызывается только один раз - при первом создании экземпляра компонента.
В отличие от метода mount, который вызывается при каждой инициализации,
метод boot выполняется единожды за всё время существования компонента.
Это позволяет использовать его для ресурсоёмких операций,
которые не нужно повторять при каждом обновлении компонента.
Синтаксис
Метод boot объявляется как публичный метод в классе компонента.
Он не принимает никаких параметров и не возвращает значения.
<?php
namespace AppLivewire;
use LivewireComponent;
class Counter extends Component
{
public function boot()
{
// код выполняется один раз
}
public function render()
{
return view('livewire.counter');
}
}
?>
Пример
Давайте создадим компонент, который при первом запуске
устанавливает начальное значение свойства $num:
<?php
namespace AppLivewire;
use LivewireComponent;
class Counter extends Component
{
public $num = 0;
public function boot()
{
$this->num = 10;
}
public function render()
{
return view('livewire.counter');
}
}
?>
<div>
<span>Число: {{ $num }}</span>
</div>
Результат выполнения кода:
<div>
<span>Число: 10</span>
</div>
Пример
Метод boot выполняется только один раз,
поэтому последующие обновления не меняют свойство:
<?php
namespace AppLivewire;
use LivewireComponent;
class Counter extends Component
{
public $num = 0;
public function boot()
{
$this->num = 100;
}
public function increment()
{
$this->num++;
}
public function render()
{
return view('livewire.counter');
}
}
?>
<div>
<span>Число: {{ $num }}</span>
<button wire:click="increment">+1</button>
</div>
После клика на кнопку свойство $num увеличится на 1,
но при следующем обновлении компонента метод boot
не будет вызван повторно:
<div>
<span>Число: 101</span>
<button>+1</button>
</div>
Пример
Используем метод boot для загрузки данных из базы
при первом запуске компонента:
<?php
namespace AppLivewire;
use LivewireComponent;
use AppModelsUser;
class UserProfile extends Component
{
public $userName = '';
public $userEmail = '';
public function boot()
{
$user = User::find(1);
$this->userName = $user->name;
$this->userEmail = $user->email;
}
public function render()
{
return view('livewire.user-profile');
}
}
?>
<div>
<h2>Профиль пользователя</h2>
<p>Имя: {{ $userName }}</p>
<p>Email: {{ $userEmail }}</p>
</div>
Результат выполнения кода:
<div>
<h2>Профиль пользователя</h2>
<p>Имя: John Doe</p>
<p>Email: john@example.com</p>
</div>