Documentación de Laravel 10.x
Aquí encontrarás fragmentos de código de Laravel y consejos útiles sobre desarrollo web.
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();});
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]);
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;}
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 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