Aprende a gestionar el tráfico de tu aplicación con elegancia y eficiencia.
Imagina que tu aplicación es un edificio enorme. Las Rutas son los letreros que indican a dónde ir, y los Controladores son las oficinas donde ocurre el trabajo real. Sin una definición clara de estos dos elementos, tu código se convertiría en un laberinto imposible de navegar.
1. El Archivo de Rutas: routes/web.php
En Laravel, casi todas las rutas para tu interfaz web se definen en el archivo routes/web.php. Una ruta básica asocia una URL con una acción.
Tipos de Métodos HTTP
Para construir una aplicación profesional, debemos usar los verbos HTTP correctos según la intención de la acción:
| Método | Uso Típico |
|---|---|
| GET | Solicitar una página o datos (Ver un formulario, leer un post). |
| POST | Enviar datos nuevos (Guardar un registro de usuario). |
| PUT / PATCH | Actualizar datos existentes. |
| DELETE | Eliminar un recurso. |
2. Pasaje de Parámetros en Rutas
A veces necesitas capturar segmentos de la URL, como el ID de un usuario o el slug de un artículo.
use Illuminate\Support\Facades\Route;
// Parámetro obligatorio
Route::get('/user/{id}', function (string $id) {
return 'ID del usuario: ' . $id;
});
// Parámetro opcional con valor por defecto
Route::get('/blog/{category?}', function (string $category = 'general') {
return "Mostrando categoría: {$category}";
});
3. Controladores: Organizando la Lógica
Escribir toda la lógica en el archivo de rutas lo volvería gigante e inmanejable. Para eso usamos los Controladores.
Paso 1: Crear el controlador con Artisan
php artisan make:controller UserController
Paso 2: Definir el método en el Controlador (app/Http/Controllers/UserController.php)
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\View\View;
class UserController extends Controller
{
/**
* Muestra el perfil de un usuario específico.
*/
public function show(string $id): View
{
$user = User::findOrFail($id); // Busca el usuario o lanza error 404
return view('user.profile', [
'user' => $user
]);
}
}
Paso 3: Vincular la Ruta al Controlador
use App\Http\Controllers\UserController;
// Sintaxis recomendada en Laravel moderno
Route::get('/profile/{id}', [UserController::class, 'show']);
4. Route Model Binding (Inyección de Modelos)
Laravel tiene un truco de magia: si el nombre del parámetro en la ruta {user} coincide con el nombre de la variable en el controlador, Laravel busca el objeto en la base de datos automáticamente.
// Ruta: Route::get('/profile/{user}', [UserController::class, 'show']);
// Controlador:
public function show(\App\Models\User $user)
{
// ¡Laravel ya buscó al usuario por su ID! No necesitas hacer User::find($id)
return view('user.profile', compact('user'));
}
5. Rutas con Nombre (Named Routes)
Nunca escribas URLs a mano en tus vistas. Usa nombres. Si mañana decides cambiar la URL de /contacto a /contactanos, solo tendrás que hacerlo en un lugar.
// Definición
Route::get('/configuracion/privacidad', [SettingsController::class, 'index'])->name('settings.privacy');
// Uso en una vista Blade o redirección
<a href="{{ route('settings.privacy') }}">Ir a Privacidad</a>
return redirect()->route('settings.privacy');
Consejo de Arquitectura: Mantén tus controladores "delgados" (Skinny Controllers). Su única función debe ser recibir la petición, pedir datos y devolver una respuesta. Si tienes 200 líneas de código en un método, es hora de mover esa lógica a un Servicio o al Modelo.