Skip to main content

Cos’è Context

La funzionalità Context di Laravel è un meccanismo per registrare e condividere informazioni attraverso l’esecuzione di richieste, job in coda e comandi. Le informazioni aggiunte tramite la facade Illuminate\Support\Facades\Context vengono aggiunte automaticamente a tutte le voci di log emesse dall’applicazione. Ti permette di distinguere chiaramente le informazioni passate a una singola chiamata di log da quelle condivise mantenute da Context. È particolarmente utile per tracciare sistemi distribuiti o architetture basate su code.

Flusso di propagazione del contesto

Uso di base

Il caso d’uso più tipico è impostare un trace_id in un middleware. Verrà incluso automaticamente in tutte le voci di log successive.
1

Crea il middleware

2

Aggiungi il trace ID a Context

3

Registra il middleware

Registralo come middleware globale in bootstrap/app.php.
Dopo questa configurazione, i log scritti da controller e servizi conterranno automaticamente url e trace_id.

Scrittura nel Context

add — aggiungere un valore

add sovrascrive una chiave esistente. Per aggiungere solo se non esiste usa addIf.

increment / decrement — gestione di contatori

Metodi dedicati per incrementare/decrementare valori numerici. Il secondo argomento indica la variazione.

when — aggiunta condizionale

Con when puoi aggiungere dati diversi a seconda che la condizione sia true o false.

push — aggiungere a uno stack

Context supporta uno “stack” per dati in forma di elenco. Con push i dati si accumulano nell’ordine in cui li aggiungi.
Esempio di storico di esecuzione query in uno stack.

Lettura del Context

get / all

only / except — prendi solo alcune chiavi

pull / pop — leggere ed eliminare

pull legge il valore e lo elimina dal Context.
Per estrarre l’ultimo valore da uno stack usa pop.

remember — se non esiste, imposta e restituisci

has / missing — verifica dell’esistenza

has restituisce true anche se il valore è null. Verifica solo la presenza della chiave.

Rimozione dal Context

Con forget elimini una chiave.

Context con scope

Con scope puoi modificare temporaneamente il Context durante l’esecuzione di una closure e ripristinarlo automaticamente al termine. Utile in test o elaborazioni locali dove vuoi aggiungere informazioni temporanee ai log.
Se modifichi un oggetto dentro lo scope, la modifica si riflette anche fuori. Se usi valori primitivi non c’è problema.

Hidden Context

Per dati che non vuoi far apparire nei log (password, chiavi API, dati personali) usa Hidden Context. Non sono leggibili con get: solo con metodi dedicati come getHidden.
Hidden Context espone lo stesso set di metodi del Context normale.

Trasferimento ai job in coda

Quando dispatchi un job nella coda, il Context corrente viene serializzato automaticamente nel payload del job. All’esecuzione del job il Context viene ripristinato, così il trace_id impostato nella richiesta viene ereditato anche nei log della coda.
Il trace_id della richiesta compare anche nei log dei job.

Dehydrating — personalizzare l’invio del job

Con Context::dehydrating puoi trasformare il Context appena prima dell’invio del job. Ad esempio, quando vuoi passare in coda la locale determinata dall’header Accept-Language.
Nella callback dehydrating non usare la facade Context: manipola solo il repository $context passato come argomento. L’uso della facade modificherebbe il Context del processo corrente.

Hydrated — ripristino all’esecuzione del job

Con Context::hydrated puoi eseguire logica quando il Context viene ripristinato prima dell’esecuzione del job. Ad esempio, applica al file di configurazione la locale salvata.
Anche nella callback hydrated non usare la facade Context: manipola solo il repository $context passato.
Hidden Context non compare nei log, quindi puoi memorizzare in sicurezza:
  • Session ID o user ID (se non vuoi che restino nei log)
  • Chiavi API e token di autenticazione
  • Locale o valori di configurazione (da ereditare in coda ma non necessari nei log)
  • Flag e stati interni
  1. Trasferimento della locale: in dehydrating salvi app.locale in Hidden Context; in hydrated la ripristini con Config::set.
  2. Propagazione dell’autenticazione: puoi far riferimento nel job alle informazioni dell’utente autenticato nella richiesta.
  3. Tenant ID: in app multi-tenant condividi l’identificatore di tenant attraverso la coda.
Ultima modifica il 13 luglio 2026