Метод exception
Метод exception класса Component вызывается автоматически при возникновении исключения в любом методе компонента Livewire. Он позволяет централизованно обрабатывать ошибки, логировать их и возвращать пользователю понятные сообщения. Метод принимает параметр $e - объект исключения.
Синтаксис
<?php
namespace AppLivewire;
use LivewireComponent;
use Exception;
class UserComponent extends Component
{
public function exception($e)
{
// Handle exception
}
}
?>
Пример
Давайте обработаем исключение, которое возникает при делении на ноль:
<?php
namespace AppLivewire;
use LivewireComponent;
use Exception;
class Calculator extends Component
{
public $result = 0;
public $num1 = 10;
public $num2 = 0;
public $error = '';
public function divide()
{
if ($this->num2 == 0) {
throw new Exception('Division by zero is not allowed');
}
$this->result = $this->num1 / $this->num2;
}
public function exception($e)
{
$this->error = 'Error: ' . $e->getMessage();
// Log error
Log::error($e->getMessage());
}
public function render()
{
return view('livewire.calculator');
}
}
?>
<div>
<div>{{ $num1 }} / {{ $num2 }}</div>
<button wire:click="divide">Divide</button>
<div>Result: {{ $result }}</div>
@if($error)
<div style="color: red;">{{ $error }}</div>
@endif
</div>
Результат выполнения кода при делении на ноль:
<div>
10 / 0
<button>Divide</button>
<div>Result: 0</div>
<div style="color: red;">Error: Division by zero is not allowed</div>
</div>
Пример
Обработаем исключение при попытке доступа к несуществующему индексу массива:
<?php
namespace AppLivewire;
use LivewireComponent;
use Exception;
class ArrayHandler extends Component
{
public $items = ['a', 'b', 'c'];
public $index = 5;
public $value = '';
public $error = '';
public function getItem()
{
if (!isset($this->items[$this->index])) {
throw new Exception('Index not found in array');
}
$this->value = $this->items[$this->index];
}
public function exception($e)
{
$this->error = 'Exception: ' . $e->getMessage();
$this->value = '';
}
public function render()
{
return view('livewire.array-handler');
}
}
?>
<div>
Array: [a, b, c]
<div>Index: {{ $index }}</div>
<button wire:click="getItem">Get Item</button>
<div>Value: {{ $value }}</div>
@if($error)
<div style="color: red;">{{ $error }}</div>
@endif
</div>
Результат выполнения кода:
<div>
Array: [a, b, c]
<div>Index: 5</div>
<button>Get Item</button>
<div>Value: </div>
<div style="color: red;">Exception: Index not found in array</div>
</div>
Пример
Обработаем исключение при неверном формате данных:
<?php
namespace AppLivewire;
use LivewireComponent;
use Exception;
class UserForm extends Component
{
public $email = 'invalid-email';
public $status = '';
public $error = '';
public function validateEmail()
{
if (!filter_var($this->email, FILTER_VALIDATE_EMAIL)) {
throw new Exception('Invalid email format');
}
$this->status = 'Email is valid';
}
public function exception($e)
{
$this->error = 'Validation error: ' . $e->getMessage();
$this->status = '';
}
public function render()
{
return view('livewire.user-form');
}
}
?>
<div>
Email: {{ $email }}
<button wire:click="validateEmail">Validate</button>
<div>Status: {{ $status }}</div>
@if($error)
<div style="color: red;">{{ $error }}</div>
@endif
</div>
Результат выполнения кода:
<div>
Email: invalid-email
<button>Validate</button>
<div>Status: </div>
<div style="color: red;">Validation error: Invalid email format</div>
</div>
Смотрите также
-
метод
mount,
который выполняется при инициализации компонента -
метод
hydrate,
который вызывается перед восстановлением состояния компонента -
метод
dehydrate,
который вызывается перед сохранением состояния компонента -
метод
skipRender,
который предотвращает перерисовку компонента