Controllers
En Laravel, los controladores son clases que agrupan la lógica de negocio para manejar las solicitudes HTTP y generar las respuestas correspondientes. Separar la lógica en controladores permite mantener las rutas limpias y facilita el mantenimiento y la escalabilidad de la aplicación.
Creación de un controlador
Se pueden crear controladores usando Artisan:
php artisan make:controller UsuarioController
Esto generará un archivo app/Http/Controllers/UsuarioController.php con la estructura básica.
Ejemplo de controlador con métodos CRUD:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Usuario;
class UsuarioController extends Controller
{
public function index()
{
return Usuario::all();
}
public function store(Request $request)
{
$request->validate([
'nombre' => 'required|string|max:255',
'email' => 'required|email|unique:usuarios,email',
]);
$usuario = Usuario::create($request->all());
return response()->json($usuario, 201);
}
public function show($id)
{
return Usuario::findOrFail($id);
}
public function update(Request $request, $id)
{
$usuario = Usuario::findOrFail($id);
$usuario->update($request->all());
return response()->json($usuario);
}
public function destroy($id)
{
$usuario = Usuario::findOrFail($id);
$usuario->delete();
return response()->json(null, 204);
}
}
Vinculación de controladores a rutas
Se pueden asociar controladores a rutas individuales:
use App\Http\Controllers\UsuarioController;
Route::get('/usuarios', [UsuarioController::class, 'index']);
Route::post('/usuarios', [UsuarioController::class, 'store']);
Route::get('/usuarios/{id}', [UsuarioController::class, 'show']);
Route::put('/usuarios/{id}', [UsuarioController::class, 'update']);
Route::delete('/usuarios/{id}', [UsuarioController::class, 'destroy']);
O usar Route::resource para generar automáticamente todas las rutas CRUD:
Route::resource('usuarios', UsuarioController::class);
Buenas prácticas y convenciones
- Mantener los controladores delgados, delegando la lógica compleja a servicios o modelos.
- Agrupar métodos relacionados por entidad o recurso (
UsuarioController,TareaController). - Nombrar métodos de manera descriptiva (
index,store,update,destroy). - Validar siempre los datos de entrada usando
Requesty reglas de validación. - Responder con JSON en APIs para mantener consistencia y claridad en las respuestas.