Redirecciones
Después de que un usuario realice alguna acción - como enviar un formulario - puede que desee redirigirlo a otra página de su aplicación.
Debido a que las solicitudes Livewire no son solicitudes estándar de navegador de página completa, las redirecciones HTTP estándar no funcionarán. En su lugar, necesita activar las redirecciones a través de JavaScript. Afortunadamente, Livewire expone un simple método de ayuda $this->redirect()
para utilizar dentro de sus componentes. Internamente, Livewire manejará el proceso de redirección en el frontend.
Si lo prefieres, también puedes utilizar las utilidades de redirección integradas en Laravel dentro de tus componentes.
Uso básico
A continuación se muestra un ejemplo de un componente CreatePost Livewire que redirige al usuario a otra página después de que envíe el formulario para crear un post:
<?php
namespace App\Livewire;
use Livewire\Component;use App\Models\Post;
class CreatePost extends Component{ public $title = '';
public $content = '';
public function save() { Post::create([ 'title' => $this->title, 'content' => $this->content, ]);
$this->redirect('/posts'); }
public function render() { return view('livewire.create-post'); }}
Como puedes ver, cuando se activa la acción de save
, también se activará una redirección a /posts
. Cuando Livewire reciba esta respuesta, redirigirá al usuario a la nueva URL en el frontend.
Redirigir a una ruta
En caso de que quieras redirigir a una página usando su nombre de ruta puedes usar el redirectRoute
.
Por ejemplo, si usted tiene una página con la ruta llamada `profile’ así:
Route::get('/user/profile', function () { // ...})->name('profile');
Puede utilizar redirectRoute
para redirigir a esa página utilizando el nombre de la ruta de esta forma:
$this->redirectRoute('profile');
En caso de que necesite pasar parámetros a la ruta, puede utilizar el segundo argumento del método redirectRoute
de la siguiente manera:
$this->redirectRoute('profile', ['id' => 1]);
Redirigir a la página prevista
Si desea redirigir al usuario a la página anterior en la que se encontraba, puede utilizar redirectIntended
. Acepta una URL predeterminada opcional como primer argumento, que se utiliza como alternativa si no se puede determinar la página anterior:
$this->redirectIntended('/default/url');
Redirección a componentes de página completa (full-page components)
Debido a que Livewire utiliza la característica de redirección incorporada de Laravel, puede utilizar todos los métodos de redirección disponibles en una aplicación típica de Laravel.
Por ejemplo, si está utilizando un componente Livewire como un componente de página completa para una ruta como esta:
use App\Livewire\ShowPosts;
Route::get('/posts', ShowPosts::class);
Puede redirigir al componente proporcionando el nombre del componente al método redirect()
:
public function save(){ // ...
$this->redirect(ShowPosts::class);}
Mensajes Flash
Además de permitirte usar los métodos de redirección incorporados en Laravel, Livewire también soporta las utilidades de datos flash de sesión de Laravel.
Para pasar datos flash junto con una redirección, puedes utilizar el método session()->flash()
de Laravel de esta forma:
use Livewire\Component;
class UpdatePost extends Component{ // ...
public function update() { // ...
session()->flash('status', 'Publicación actualizada correctamente.');
$this->redirect('/posts'); }}
Suponiendo que la página a la que se redirige contiene el siguiente fragmento de Blade, el usuario verá un mensaje “Publicación actualizada correctamente” después de actualizar la publicación:
@if (session('status')) <div class="alert alert-success"> {{ session('status') }} </div>@endif