Saltar al contenido principal

Routing

El routing en Laravel permite definir cómo la aplicación responde a las solicitudes HTTP dirigidas a URLs específicas. Laravel ofrece un sistema potente y flexible para gestionar rutas, con soporte para parámetros, middleware, nombres de rutas y agrupaciones.

Rutas básicas

Las rutas se definen en los archivos routes/web.php (para aplicaciones web) o routes/api.php (para APIs). Ejemplos:

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
return view('welcome');
});

Route::post('/usuarios', function () {
return 'Usuario creado';
});

Route::put('/usuarios/{id}', function ($id) {
return "Usuario {$id} actualizado";
});

Route::delete('/usuarios/{id}', function ($id) {
return "Usuario {$id} eliminado";
});

Rutas con parámetros

Laravel permite capturar valores dinámicos en las rutas:

Route::get('/usuarios/{id}', function ($id) {
return "Usuario con ID: {$id}";
});

Se pueden definir múltiples parámetros y opcionales:

Route::get('/usuarios/{id}/tareas/{tareaId?}', function ($id, $tareaId = null) {
return "Usuario {$id}, Tarea {$tareaId}";
});

Agrupación de rutas

Para organizar rutas relacionadas se pueden usar grupos de rutas con prefijos, nombres y middleware:

Route::prefix('admin')->middleware('auth')->group(function () {
Route::get('/dashboard', function () {
return 'Panel de administración';
});

Route::resource('usuarios', UsuarioController::class);
});
  • prefix: agrega un prefijo a todas las rutas del grupo.
  • middleware: aplica middleware a todas las rutas del grupo.
  • Route::resource: genera automáticamente rutas CRUD para un controlador.

Buenas prácticas y convenciones

  • Mantener las rutas organizadas en web.php para web y api.php para APIs.
  • Nombrar rutas de forma descriptiva usando ->name('nombre.ruta') para facilitar la generación de URLs.
  • Evitar lógica compleja dentro de las rutas; delegar a controladores.
  • Agrupar rutas relacionadas con prefix y middleware para mantener la coherencia y seguridad.
  • Usar Route::resource o Route::controller cuando sea posible para reducir la repetición de código.