Saltar al contenido principal

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 Request y reglas de validación.
  • Responder con JSON en APIs para mantener consistencia y claridad en las respuestas.