Есть ли хороший способ изящно обрабатывать неправильные вызовы методов в LiveWire?Php

Кемеровские программисты php общаются здесь
Anonymous
Есть ли хороший способ изящно обрабатывать неправильные вызовы методов в LiveWire?

Сообщение Anonymous »

Большинство моих компонентов расширяются из абстрактного класса, в котором я регистрирую некоторую обработку исключений с помощью перехватчика жизненного цикла исключений

Код: Выделить всё

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);
}
Вместо общей ошибки 404 будет отображаться всплывающее сообщение в странном модальном окне.

Код: Выделить всё

public function doThing(): void
{
Gate::authorize('do-thing');
}
Вместо общей ошибки 403 будет отображаться всплывающее сообщение в странном модальном окне.
Это также работает в 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();
Это вызовет исключение Livewire\Exceptions\MethodNotFoundException, но даже если я добавлю

Код: Выделить всё

if ($e instanceof MethodNotFoundException) {
Log::warning('...')
$stopPropagation();
}
к моему обработчику исключений он вообще не попадает. Нужно ли мне справиться с этим каким-то другим способом?


Подробнее здесь: https://stackoverflow.com/questions/797 ... n-livewire

Вернуться в «Php»