Saltar al contenido principal

Controllers

Los controladores en Lumen son clases que agrupan la lógica de manejo de las solicitudes HTTP. Su función principal es recibir la solicitud, procesar los datos y devolver una respuesta adecuada, manteniendo el código organizado y separado de las rutas.

Creación de un controlador

Los controladores se crean dentro de la carpeta app/Http/Controllers. Por ejemplo, un controlador para gestionar usuarios podría llamarse UsuarioController.php:

<?php

namespace App\Http\Controllers;

use Laravel\Lumen\Routing\Controller as BaseController;
use Illuminate\Http\Request;

class UsuarioController extends BaseController
{
public function listar()
{
return response()->json([
'usuarios' => ['Juan', 'María', 'Pedro']
]);
}

public function crear(Request $request)
{
$nombre = $request->input('nombre');
return response()->json([
'mensaje' => "Usuario $nombre creado correctamente"
], 201);
}
}

Vinculación de controladores a rutas

En routes/web.php o routes/api.php, se vincula cada método del controlador a una ruta:

$router->get('/usuarios', 'UsuarioController@listar');
$router->post('/usuarios', 'UsuarioController@crear');

De esta forma, la ruta /usuarios para GET ejecutará el método listar, mientras que la misma ruta para POST ejecutará el método crear.

Controladores y patrones de diseño

  • Separación de responsabilidades: cada controlador debe encargarse de un conjunto relacionado de acciones (por ejemplo, usuarios, productos, pedidos).
  • Delegación de lógica: la lógica compleja debe delegarse a modelos, servicios o repositorios, manteniendo los controladores delgados.
  • Reutilización: métodos comunes que se usan en varios controladores pueden extraerse a clases auxiliares o traits.

Buenas prácticas y convenciones en controladores

  • Nombrar los controladores usando un sustantivo que indique el recurso gestionado, seguido de Controller (por ejemplo: ProductoController).
  • Mantener los métodos enfocados en acciones concretas: listar, crear, actualizar, eliminar, mostrar.
  • Evitar lógica de negocio compleja dentro de los métodos; usar servicios para procesamientos avanzados.
  • Responder siempre con objetos o estructuras coherentes, preferiblemente en formato JSON para APIs.
  • Documentar los métodos con comentarios claros sobre parámetros, tipos de retorno y posibles respuestas HTTP.