Код: Выделить всё
use App\Livewire\BaseComponent;
class MyComponent extends BaseComponent
{
...
}
Код: Выделить всё
abstract class BaseComponent extends \Livewire\Component
{
public function exception(\Throwable $e, \Closure $stopPropagation): void
{
if ($e instanceof ModelNotFoundException) {
Flux::toast(text: '...'));
$stopPropagation();
}
if ($e instanceof AuthorizationException) {
Flux::toast(text: 'Unauthorized'));
$stopPropagation();
}
}
}
Код: Выделить всё
#[On('show-thing')]
public function showThing($id)
{
$thing = ThingModel::findOrFail($id);
}
Код: Выделить всё
public function doThing(): void
{
Gate::authorize('do-thing');
}
Это также работает в JavaScript.
Код: Выделить всё
window.dispatchEvent(new CustomEvent('show-thing', { detail: { id: -999 } })); // makes a toast pop up if -999 is not a valid id
Livewire.find('....').doThing() // makes a toast pop up if I'm not authorized
То, что я пытаюсь предотвратить (или, скорее, обработать), — это исключения, возникающие из-за неправильного вызова метода.
Например, если попытаться открыть консоль js и сделать
Код: Выделить всё
Livewire.first().unexistentMethod();
Код: Выделить всё
if ($e instanceof MethodNotFoundException) {
Log::warning('...')
$stopPropagation();
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... n-livewire
Мобильная версия