Перейти к содержанию

Перенаправление⚓︎

После того как пользователь выполнит какое-либо действие — например, отправит форму — вы можете захотеть перенаправить его на другую страницу вашего приложения.

Поскольку запросы 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', вот так:

<?php

Route::get('/user/profile', function () {
    // ...
})->name('profile');

Вы можете использовать redirectRoute для перенаправления на эту страницу по имени маршрута следующим образом:

<?php

$this->redirectRoute('profile');

Если вам нужно передать параметры маршруту, вы можете использовать второй аргумент метода redirectRoute следующим образом:

<?php

$this->redirectRoute('profile', ['id' => 1]);

Перенаправление на целевую страницу⚓︎

Если вы хотите перенаправить пользователя обратно на предыдущую страницу, на которой он находился, вы можете использовать redirectIntended. В качестве первого аргумента он принимает необязательный URL-адрес по умолчанию, который используется как запасной вариант, если определить предыдущую страницу невозможно:

<?php

$this->redirectIntended('/default/url');

Перенаправление на полностраничные компоненты⚓︎

Поскольку Livewire использует встроенную функцию перенаправления Laravel, вы можете использовать все методы перенаправления, доступные вам в обычном приложении Laravel.

Например, если вы используете компонент Livewire в качестве полностраничного компонента для маршрута, вот так:

<?php

Route::livewire('/posts', 'pages::show-posts');

Вы можете перенаправить на него, просто используя путь маршрута:

<?php

public function save()
{
    // ...

    $this->redirect('/posts');
}

Перенаправление на действия контроллера⚓︎

Если вы хотите выполнить перенаправление на маршрут, обрабатываемый действием контроллера, вы можете использовать redirectAction():

<?php

$this->redirectAction([UserController::class, 'index']);

Вы можете передать параметры в действие контроллера в качестве второго аргумента:

<?php

$this->redirectAction([UserController::class, 'show'], ['id' => 1]);

Флеш-сообщения⚓︎

В дополнение к возможности использования встроенных методов перенаправления 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

Смотрите также⚓︎

  • Навигация — Использование SPA-навигации для перенаправлений
  • Действия — Перенаправление после завершения действия
  • Формы — Перенаправление после успешной отправки формы
  • Страницы — Навигация между компонентами страниц