02 -Rutas en Laravel
Rutas en Laravel: Explicación y Ejemplos
Las rutas en Laravel son el mecanismo que permite definir cómo responde tu aplicación a las solicitudes HTTP entrantes. Todas las rutas de Laravel se definen en los archivos dentro del directorio routes/.
Tipos básicos de rutas
1. Rutas básicas
Route::get('/saludo', function () {
return '¡Hola Mundo!';
});Cuando se visita /saludo en el navegador, se mostrará "¡Hola Mundo!".
2. Rutas con parámetros
Route::get('/usuario/{id}', function ($id) {
return 'Usuario '.$id;
});Esta ruta capturará el ID de la URL y lo pasará a la función.
3. Rutas con parámetros opcionales
Route::get('/post/{titulo?}', function ($titulo = 'Título por defecto') {
return $titulo;
});El parámetro titulo es opcional y tiene un valor por defecto.
4. Rutas con restricciones
Route::get('/user/{id}', function ($id) {
// Solo se ejecutará si {id} es numérico
})->where('id', '[0-9]+');5. Rutas con nombre
Route::get('/perfil', function () {
// ...
})->name('perfil');Puedes generar URLs a esta ruta usando route('perfil').
Rutas hacia controladores
Route::get('/productos', 'ProductoController@index');Esto dirigirá las solicitudes GET a /productos al método index de ProductoController.
Grupos de rutas
Route::prefix('admin')->group(function () {
Route::get('/usuarios', function () {
// Ruta: /admin/usuarios
});
Route::get('/config', function () {
// Ruta: /admin/config
});
});Tabla de comandos comunes de rutas
| Comando | Explicación |
|---|---|
Route::get($uri, $callback) | Define una ruta que responde a solicitudes GET |
Route::post($uri, $callback) | Define una ruta que responde a solicitudes POST |
Route::put($uri, $callback) | Define una ruta que responde a solicitudes PUT |
Route::patch($uri, $callback) | Define una ruta que responde a solicitudes PATCH |
Route::delete($uri, $callback) | Define una ruta que responde a solicitudes DELETE |
Route::any($uri, $callback) | Responde a cualquier método HTTP |
Route::match(['get', 'post'], $uri, $callback) | Responde solo a los métodos especificados |
Route::redirect($from, $to) | Redirige una URI a otra |
Route::view($uri, $view) | Devuelve una vista sin necesidad de controlador |
Route::resource($name, $controller) | Genera todas las rutas RESTful para un recurso |
->name($name) | Asigna un nombre a la ruta |
->middleware($middleware) | Aplica middleware a la ruta |
->where($param, $regex) | Aplica restricciones a los parámetros de ruta |
Route::prefix($prefix)->group() | Agrupa rutas con un prefijo común |
Route::namespace($namespace)->group() | Agrupa rutas bajo un namespace específico |
Las rutas son fundamentales en Laravel y ofrecen muchas más posibilidades como middleware, binding de modelos, subdominios, etc. Esta es solo una introducción básica.
1. Rutas individuales (manualmente)
use App\Http\Controllers\TaskController;
use Illuminate\Support\Facades\Route;
Route::get('/tasks', [TaskController::class, 'index'])->name('tasks.index');
Route::get('/tasks/create', [TaskController::class, 'create'])->name('tasks.create');
Route::post('/tasks', [TaskController::class, 'store'])->name('tasks.store');
Route::get('/tasks/{task}', [TaskController::class, 'show'])->name('tasks.show');
Route::get('/tasks/{task}/edit', [TaskController::class, 'edit'])->name('tasks.edit');
Route::put('/tasks/{task}', [TaskController::class, 'update'])->name('tasks.update');
Route::delete('/tasks/{task}', [TaskController::class, 'destroy'])->name('tasks.destroy');2. Rutas agrupadas con resource (recomendado)
Laravel permite generar todas las rutas CRUD automáticamente con Route::resource:
use App\Http\Controllers\TaskController;
use Illuminate\Support\Facades\Route;
Route::resource('tasks', TaskController::class);Esto crea las mismas rutas que el método anterior, pero en una sola línea.
Rutas generadas por Route::resource:
| Método HTTP | Ruta | Controlador | Nombre de ruta |
|---|---|---|---|
| GET | /tasks | index() | tasks.index |
| GET | /tasks/create | create() | tasks.create |
| POST | /tasks | store() | tasks.store |
| GET | /tasks/{task} | show() | tasks.show |
| GET | /tasks/{task}/edit | edit() | tasks.edit |
| PUT/PATCH | /tasks/{task} | update() | tasks.update |
| DELETE | /tasks/{task} | destroy() | tasks.destroy |
3. Rutas apiResource (para APIs)
Si estás construyendo una API, usa apiResource para excluir las rutas de vistas como create y edit:
Route::apiResource('tasks', TaskController::class);¿Dónde colocar estas rutas?
Rutas web: En
routes/web.php(para aplicaciones con vistas).Rutas API: En
routes/api.php(si es una API RESTful).
Si usas Laravel 9+, asegúrate de importar el controlador:
use App\Http\Controllers\TaskController;Consejo adicional
Si quieres ver todas las rutas definidas en tu proyecto, ejecuta:
php artisan route:listEsto mostrará una tabla con todas las rutas, métodos y controladores asociados.
Comando route:list en Laravel
El comando route:list es una herramienta muy útil que muestra una tabla con todas las rutas registradas en tu aplicación Laravel, incluyendo sus métodos HTTP, URIs, nombres (si los tienen), acciones y middlewares aplicados.
Ejemplo de uso
Para ver la lista de rutas, ejecuta en tu terminal:
php artisan route:listEsto mostrará una salida similar a:
+--------+----------+-------------------+------+---------+--------------+
| Method | URI | Name | Action | Middleware |
+--------+----------+-------------------+------+---------+--------------+
| GET | / | | Closure | web |
| GET | saludo | | Closure | web |
| GET | usuario/{id} | | Closure | web |
| GET | perfil | perfil | Closure | web |
| GET | productos | | ProductoController@index | web |
+--------+----------+-------------------+------+---------+--------------+Opciones útiles del comando
Puedes usar varias opciones para filtrar o formatear la salida:
# Mostrar solo rutas con nombre
php artisan route:list --name=perfil
# Mostrar rutas que coincidan con un URI específico
php artisan route:list --path=usuario
# Mostrar en formato JSON
php artisan route:list --json
# Mostrar más detalles (incluyendo middlewares)
php artisan route:list -vTabla actualizada con el comando route:list
| Comando | Explicación |
|---|---|
php artisan route:list | Muestra una tabla con todas las rutas registradas, sus métodos, URIs, nombres y acciones |
Route::get($uri, $callback) | Define una ruta que responde a solicitudes GET |
Route::post($uri, $callback) | Define una ruta que responde a solicitudes POST |
Route::put($uri, $callback) | Define una ruta que responde a solicitudes PUT |
Route::patch($uri, $callback) | Define una ruta que responde a solicitudes PATCH |
Route::delete($uri, $callback) | Define una ruta que responde a solicitudes DELETE |
Route::any($uri, $callback) | Responde a cualquier método HTTP |
Route::match(['get', 'post'], $uri, $callback) | Responde solo a los métodos especificados |
Route::redirect($from, $to) | Redirige una URI a otra |
Route::view($uri, $view) | Devuelve una vista sin necesidad de controlador |
Route::resource($name, $controller) | Genera todas las rutas RESTful para un recurso |
->name($name) | Asigna un nombre a la ruta |
->middleware($middleware) | Aplica middleware a la ruta |
->where($param, $regex) | Aplica restricciones a los parámetros de ruta |
Route::prefix($prefix)->group() | Agrupa rutas con un prefijo común |
Route::namespace($namespace)->group() | Agrupa rutas bajo un namespace específico |
El comando route:list es especialmente útil para:
Depurar problemas de rutas
Verificar que todas las rutas estén correctamente definidas
Comprobar los middlewares aplicados a cada ruta
Identificar conflictos entre rutas
Documentar tu API o sistema de rutas
Comentarios
Publicar un comentario