Simplifica el seguimiento de contadores con los nuevos métodos Context de Laravel

  • Publicado el 31 marzo, 2025
  • Palabras: 123

¿Necesitas monitorizar contadores o métricas en tu aplicación Laravel? Los nuevos métodos de incremento y decremento para Context ofrecen una solución sencilla y elegante para mantener los contadores sin una gestión de estado compleja.

Simplifica el seguimiento de contadores con los nuevos métodos Context de Laravel

El sistema de contexto de Laravel te permite almacenar y acceder a datos en diferentes partes de tu aplicación. Con los métodos de incremento y decremento, ahora puedes rastrear fácilmente valores numéricos sin tener que gestionar manualmente el estado.

Veamos cómo funcionan estos métodos:

 

// Initialize or increment a counter
Context::increment('uploads'); // 1
Context::increment('uploads'); // 2

// Increment by a specific amount
Context::increment('uploads', 5); // 7

// Decrement counters
Context::decrement('active_users'); // -1
Context::decrement('remaining_credits', 3); // -3

 

#Ejemplo práctico

Estos métodos son especialmente útiles para el seguimiento de las métricas de la aplicación o la monitorización del uso de recursos. A continuación, se muestra un ejemplo práctico:

 

class FileUploadController extends Controller
{
    public function store(Request $request)
    {
        // Increment total upload attempts
        Context::increment('stats.upload_attempts');
        
        try {
            // Validate and store file
            $request->validate([
                'file' => 'required|file|max:10240',
            ]);
            
            $path = $request->file('file')->store('uploads');
            
            // Increment successful uploads counter
            Context::increment('stats.successful_uploads');
            
            // Track total size of uploads
            $size = $request->file('file')->getSize();
            Context::increment('stats.total_upload_size', $size);
            
            return response()->json(['path' => $path]);
        } catch (ValidationException $e) {
            // Increment validation failure counter
            Context::increment('stats.validation_failures');
            throw $e;
        } catch (Exception $e) {
            // Increment error counter
            Context::increment('stats.upload_errors');
            throw $e;
        }
    }
}

 

Luego, puede utilizar middleware o un service provider para registrar estas estadísticas al final de cada solicitud:

 

class StatsLoggerMiddleware
{
    public function handle($request, $next)
    {
        $response = $next($request);
        
        // Log the stats at the end of the request
        $this->logStats();
        
        return $response;
    }
    
    protected function logStats()
    {
        // Get all the stats from context
        $uploadAttempts = Context::get('stats.upload_attempts', 0);
        $successfulUploads = Context::get('stats.successful_uploads', 0);
        $validationFailures = Context::get('stats.validation_failures', 0);
        $uploadErrors = Context::get('stats.upload_errors', 0);
        $totalSize = Context::get('stats.total_upload_size', 0);
        
        // Log the stats
        Log::info('Upload Stats', [
            'attempts' => $uploadAttempts,
            'successful' => $successfulUploads,
            'failed_validation' => $validationFailures,
            'errors' => $uploadErrors,
            'total_size' => $totalSize,
        ]);
    }
}

 

Al aprovechar estos nuevos métodos Context, puede implementar una lógica de contador limpia y fácil de mantener en todas sus aplicaciones Laravel sin recurrir a variables globales o patrones complejos de gestión de estados.

Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

Fuente: Harris Raftopoulos

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión