Un controlador es la clase que recibe una petición y coordina la respuesta de la aplicación.
En Laravel, la filosofía es: “El archivo de rutas (web.php) solo debe ser un índice, no el libro entero”. Las rutas deben apuntar a un Controlador, y el Controlador es quien hace el trabajo.
Creando tu primer controlador
No lo crees a mano. Usa a tu asistente Artisan:
php artisan make:controller ProductoControllerEsto genera un archivo en app/Http/Controllers/ProductoController.php. Es una clase vacía donde pondremos nuestras funciones (llamadas métodos).
Moviendo la lógica: de la ruta al controlador
Vamos a crear un método para mostrar un listado de productos.
A. En el Controlador (ProductoController.php):
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProductoController extends Controller
{
// Método para mostrar la lista
public function index()
{
$productos = ['Teclado', 'Ratón', 'Monitor']; // Simulamos datos de BD
// Devolvemos la vista pasando los datos
return view('productos.lista', ['items' => $productos]);
}
}B. En el archivo de Rutas (web.php):
Ahora la ruta queda limpísima. Solo dice “Si vas a /productos, llama al método index del ProductoController”.
use App\Http\Controllers\ProductoController;
use Illuminate\Support\Facades\Route;
// Sintaxis: [Clase::class, 'NombreDelMetodo']
Route::get('/productos', [ProductoController::class, 'index']);El objeto Request: adiós a $_POST y $_GET
Aquí viene uno de los cambios más grandes respecto al PHP clásico. En lugar de buscar variables globales como $_POST['nombre'], Laravel te entrega un Objeto Request que contiene toda la información de la petición HTTP de forma ordenada y segura.
¿Cómo se usa? (Inyección de Dependencias)
Simplemente “pides” el objeto en los parámetros de tu función. Laravel es tan listo que, al ver que pides Request $request, te lo inyecta automáticamente lleno de datos.
Ejemplo: Procesar un formulario de contacto
Supongamos que tienes un formulario HTML que envía nombre y email por POST.
// En el Controlador
public function guardar(Request $request)
{
// PHP Antiguo (NO HACER):
// $nombre = $_POST['nombre'];
// LARAVEL (Forma Correcta):
// 1. Obtener un dato específico
$nombre = $request->input('nombre');
// 2. Obtener todo el formulario como array
$datos = $request->all();
// 3. Verificar si viene un dato (true/false)
if ($request->has('suscripcion')) {
// ...
}
// 4. Obtener la IP del usuario
$ip = $request->ip();
// Lógica para guardar (lo veremos luego)...
// 5. Redirigir a otra página
return redirect('/gracias')->with('mensaje', '¡Recibido!');
}¿Por qué es mejor usar Request?
- Acceso uniforme:
Requestfacilita leer datos, archivos, cabeceras y metadatos. No valida ni sanitiza automáticamente: debes aplicar reglas de validación y escapar la salida. - Uniformidad: No importa si el dato viene por JSON (API), por formulario POST o por URL GET. El método
$request->input('dato')funciona igual para todos. - Métodos útiles: Tiene funciones integradas como
$request->isMethod('post'),$request->file('foto'), etc.