Enrutamiento
Enrutamiento básico
Las rutas más básicas de Laravel simplemente aceptan una URI y un Closure
, proporcionando un método muy simple y expresivo de definir rutas:
Route::get('foo', function () {
return 'Hello World';
});
Los archivos de ruta predeterminados
Todas las rutas de Laravel están definidas en los archivos de ruta, que se encuentran en el directorio routes
. Estos archivos son cargados automáticamente por el framework. El archivo routes/web.php
define las rutas que son para su interfaz web. A estas rutas se les asigna el grupo de middleware
web, que proporciona características como estado de sesión y protección CSRF
. Las rutas en route/api.php
son apátridas y se les asigna el grupo de middleware
api.
Para la mayoría de las aplicaciones, usted comenzará definiendo rutas en su archivo route/web.php
. Se puede acceder a las rutas definidas en route/web.php
introduciendo la URL de la ruta definida en su navegador. Por ejemplo, puede acceder a la siguiente ruta navegando a http://your-app.dev/user
en su navegador:
Route::get('/user', 'UsersController@index');
Las rutas definidas en el archivo routeService/api.php
se agrupan dentro de un grupo de rutas por el proveedor de servicios de rutas. Dentro de este grupo, el prefijo /api URI
se aplica automáticamente, por lo que no es necesario aplicarlo manualmente a todas las rutas del archivo. Puede modificar el prefijo y otras opciones del grupo de rutas modificando su clase RouteServiceProvider
.
Métodos de enrutamiento disponibles
El enrutador le permite registrar rutas que responden a cualquier verbo HTTP:
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
A veces puede ser necesario registrar una ruta que responda a múltiples verbos HTTP. Puede hacerlo utilizando el método match
. O incluso puede registrar una ruta que responda a todos los verbos HTTP usando el método any
:
Route::match(['get', 'post'], '/', function () {
//
});
Route::any('foo', function () {
//
});
Protección CSRF
Cualquier formulario HTML que apunte a rutas POST, PUT o DELETE que se definan en el archivo de rutas web debe incluir un campo CSRF token. De lo contrario, la solicitud será rechazada. Puede leer más sobre la protección CSRF en la documentación CSRF:
<form method="POST" action="/profile">
{{ csrf_field() }}
...
</form>
Redireccionar rutas
Si está definiendo una ruta que se redirige a otra URI, puede utilizar el método Route:: redirect
. Este método proporciona un acceso directo conveniente para que no tenga que definir una ruta completa o un controlador para realizar una redirección simple:
Route::redirect('/here', '/there', 301);
Ver Rutas
Si su ruta sólo necesita devolver una vista, puede utilizar el método Route:: view
. Al igual que el método redirect
, este método proporciona un acceso directo sencillo para que no tenga que definir una ruta completa o un controlador. El método view
acepta un URI como su primer argumento y un nombre como su segundo argumento. Además, puede proporcionar una matriz de datos para pasar a la vista como tercer argumento opcional:
Route::view('/welcome', 'welcome');
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);
Parámetros de la ruta
Parámetros requeridos
Por supuesto, a veces necesitará capturar segmentos de la URI dentro de su ruta. Por ejemplo, es posible que necesite capturar un ID de usuario desde la URL. Puede hacerlo definiendo parámetros de ruta:
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
Puede definir tantos parámetros de ruta como necesite su ruta:
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
//
});
Los parámetros de la ruta siempre están encapsulados dentro de las llaves {}
y deben constar de caracteres alfabéticos, y no pueden contener un carácter -. En lugar de utilizar el carácter -
, utilice un guión bajo (_
). Los parámetros de ruta se inyectan en las llamadas de retorno de ruta / controladores basados en su orden - los nombres de los argumentos de retorno de llamada / controlador no importan.
Parámetros opcionales
Ocasionalmente puede que necesite especificar un parámetro de ruta, pero haga opcional la presencia de dicho parámetro de ruta. Puede hacerlo colocando un ?
después del nombre del parámetro. Asegúrate de darle a la variable correspondiente de la ruta un valor por defecto:
Route::get('user/{name?}', function ($name = null) {
return $name;
});
Route::get('user/{name?}', function ($name = 'John') {
return $name;
});
Restricciones con Expresión Regular
Puede restringir el formato de los parámetros de ruta utilizando el método where
en una instancia de ruta. El método where
acepta el nombre del parámetro y una expresión regular que define cómo se debe restringir el parámetro:
Route::get('user/{name}', function ($name) {
//
})->where('name', '[A-Za-z]+');
Route::get('user/{id}', function ($id) {
//
})->where('id', '[0-9]+');
Route::get('user/{id}/{name}', function ($id, $name) {
//
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
Restricciones globales
Si desea que un parámetro de ruta esté siempre limitado por una expresión regular determinada, puede utilizar el método pattern
. Debe definir estos patrones en el método de arranque de su RouteServiceProvider
:
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
Route::pattern('id', '[0-9]+');
parent::boot();
}
Una vez definido el patrón, se aplica automáticamente a todas las rutas con ese nombre de parámetro:
Route::get('user/{id}', function ($id) {
// Only executed if {id} is numeric...
});