Перенаправление⚓︎
После того как пользователь выполнит какое-либо действие — например, отправит форму — вы можете захотеть перенаправить его на другую страницу вашего приложения.
Поскольку запросы Livewire не являются стандартными полностраничными запросами браузера, стандартные HTTP-перенаправления не сработают. Вместо этого вам нужно инициировать перенаправления с помощью JavaScript. К счастью, Livewire предоставляет простой вспомогательный метод $this->redirect() для использования внутри ваших компонентов. Под капотом Livewire сам обработает процесс перенаправления на фронтенде.
При желании вы также можете использовать встроенные утилиты перенаправления Laravel внутри ваших компонентов.
Базовое использование⚓︎
Ниже приведен пример компонента Livewire post.create, который перенаправляет пользователя на другую страницу после отправки формы для создания поста:
<?php
use Livewire\Component;
use App\Models\Post;
new class extends Component {
public $title = '';
public $content = '';
public function save()
{
Post::create([
'title' => $this->title,
'content' => $this->content,
]);
$this->redirect('/posts');
}
};
?>
<form wire:submit="save">
<!-- Поля формы... -->
</form>
Как видите, при вызове действия save также будет инициировано перенаправление на /posts. Когда Livewire получит этот ответ, он перенаправит пользователя на новый URL-адрес на фронтенде.
Перенаправление на маршрут⚓︎
Если вы хотите выполнить перенаправление на страницу, используя имя ее маршрута, вы можете использовать redirectRoute.
Например, если у вас есть страница с именем маршрута 'profile', вот так:
Вы можете использовать redirectRoute для перенаправления на эту страницу по имени маршрута следующим образом:
Если вам нужно передать параметры маршруту, вы можете использовать второй аргумент метода redirectRoute следующим образом:
Перенаправление на целевую страницу⚓︎
Если вы хотите перенаправить пользователя обратно на предыдущую страницу, на которой он находился, вы можете использовать redirectIntended. В качестве первого аргумента он принимает необязательный URL-адрес по умолчанию, который используется как запасной вариант, если определить предыдущую страницу невозможно:
Перенаправление на полностраничные компоненты⚓︎
Поскольку Livewire использует встроенную функцию перенаправления Laravel, вы можете использовать все методы перенаправления, доступные вам в обычном приложении Laravel.
Например, если вы используете компонент Livewire в качестве полностраничного компонента для маршрута, вот так:
Вы можете перенаправить на него, просто используя путь маршрута:
Перенаправление на действия контроллера⚓︎
Если вы хотите выполнить перенаправление на маршрут, обрабатываемый действием контроллера, вы можете использовать redirectAction():
Вы можете передать параметры в действие контроллера в качестве второго аргумента:
Флеш-сообщения⚓︎
В дополнение к возможности использования встроенных методов перенаправления Laravel, Livewire также поддерживает утилиты для работы с флеш-данными сессии Laravel.
Чтобы передать флеш-данные вместе с перенаправлением, вы можете использовать метод Laravel session()->flash() следующим образом:
<?php
use Livewire\Component;
new class extends Component {
// ...
public function update()
{
// ...
session()->flash('status', 'Пост успешно обновлён');
$this->redirect('/posts');
}
};
?>
Если страница, на которую выполняется перенаправление, содержит следующий фрагмент кода Blade, то после обновления поста пользователь увидит сообщение «Пост успешно обновлён»:
<?php
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif