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.