Есть ли хороший способ изящно обрабатывать неправильные вызовы методов в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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