Перехват исключения в Livewire
Давайте разберём такой случай. Кнопка на странице поста вызывает метод, который намеренно бросает исключение. Вместо ожидаемой подписи человек видит общий экран ошибки фреймворка, хотя сбой локальный и его можно обработать внутри компонента.
Метод exception вызывается,
когда в компоненте
всплыло необработанное
исключение. Внутри можно
записать своё сообщение
и вызвать метод stopPropagation,
чтобы ошибка не ушла
дальше и страница
осталась рабочей.
Страница откроется
по адресу /posts/guard.
Давайте создадим компонент
PostGuard:
php artisan make:livewire PostGuard --class
Давайте добавим маршрут и страницу:
<?php
Route::get('/posts/guard', function () {
return view('posts-guard');
});
?>
<x-layout>
<livewire:post-guard />
</x-layout>
Давайте опишем метод boom и перехват в exception:
<?php
namespace App\Livewire;
use Livewire\Component;
class PostGuard extends Component
{
public $note = '';
public function boom()
{
throw new \Exception('Boom');
}
public function exception($e, $stopPropagation)
{
$this->note = 'Caught';
$stopPropagation();
}
public function render()
{
return view('livewire.post-guard');
}
}
?>
Давайте выведем подпись и кнопку сбоя:
<div>
{{ $note }}
<button
type="button"
wire:click="boom"
>
Boom
</button>
</div>
Создайте компонент EmployeeGuard.
Сбой в методе работника
не роняет страницу, а на
экране видна короткая подпись.