1. Redirecciones HTTP

Únete a nuestra comunidad de Telegram @webblend!

Aquí encontrarás fragmentos de código de Laravel y consejos útiles sobre desarrollo web.

Creando Redirecciones

Las respuestas de redirección son instancias de la clase Illuminate\Http\RedirectResponse y contienen las cabeceras adecuadas necesarias para redirigir al usuario a otra URL. Hay varias formas de generar una instancia de RedirectResponse. El método más simple es utilizar la función global redirect:

Route::get('/dashboard', function () {
return redirect('/home/dashboard');
});

A veces puede ser necesario redirigir al usuario a su ubicación anterior, como cuando un formulario enviado no es válido. Puedes hacerlo utilizando la función global back. Dado que esta característica utiliza sesiones, asegúrate de que la ruta que llama a la función back esté utilizando el grupo de middleware web o tenga aplicados todos los middleware de sesión:

Route::post('/user/profile', function () {
// Validar la solicitud...
 
return back()->withInput();
});

Redirigir a Rutas con Nombre

Cuando llamas a la función redirect sin parámetros, se devuelve una instancia de Illuminate\Routing\Redirector, lo que te permite llamar a cualquier método en la instancia de Redirector. Por ejemplo, para generar una RedirectResponse a una ruta con nombre, puedes usar el método route:

return redirect()->route('login');

Si tu ruta tiene parámetros, puedes pasarlos como segundo argumento al método route:

// Para una ruta con la siguiente URI: perfil/{id}
 
return redirect()->route('profile', ['id' => 1]);

Por conveniencia, Laravel también ofrece la función global to_route:

return to_route('profile', ['id' => 1]);

Poblar Parámetros a través de Modelos Eloquent

Si estás redirigiendo a una ruta con un parámetro de "ID" que se está llenando desde un modelo Eloquent, puedes pasar el propio modelo. El ID se extraerá automáticamente:

// Para una ruta con la siguiente URI: perfil/{id}
 
return redirect()->route('profile', [$user]);

Si deseas personalizar el valor que se coloca en el parámetro de ruta, debes anular el método getRouteKey en tu modelo Eloquent:

/**
* Obtener el valor de la clave de ruta del modelo.
*/
public function getRouteKey(): mixed
{
return $this->slug;
}

Redirigir a Acciones de Controladores

También puedes generar redirecciones a acciones de controladores. Para hacerlo, pasa el nombre del controlador y la acción al método action:

use App\Http\Controllers\HomeController;
 
return redirect()->action([HomeController::class, 'index']);

Si la ruta de tu controlador requiere parámetros, puedes pasarlos como segundo argumento al método action:

return redirect()->action(
[UserController::class, 'profile'], ['id' => 1]
);

Redirigir con Datos de Sesión Intermitente

Redirigir a una nueva URL y intercambiar datos con la sesión generalmente se hacen al mismo tiempo. Normalmente, esto se hace después de realizar con éxito una acción cuando se intercambia un mensaje de éxito a la sesión. Para mayor comodidad, puedes crear una instancia de RedirectResponse e intercambiar datos con la sesión en una única y fluida cadena de métodos:

Route::post('/user/profile', function () {
// Actualizar el perfil del usuario...
 
return redirect('/dashboard')->with('status', 'Profile updated!');
});

Puedes usar el método withInput proporcionado por la instancia de RedirectResponse para intercambiar los datos de entrada actuales de la solicitud con la sesión antes de redirigir al usuario a un nuevo lugar. Una vez que la entrada se ha intercambiado con la sesión, puedes recuperarla fácilmente durante la próxima solicitud:

return back()->withInput();

Después de que el usuario sea redirigido, puedes mostrar el mensaje intercambiado desde la sesión. Por ejemplo, utilizando la sintaxis de Blade:

@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif