Contexte
Parfois, vous avez besoin d'enregistrer pourquoi quelque chose s'est produit, et pas seulement ce qui a changé. AuditChain::context() vous permet d'attacher des métadonnées arbitraires à tous les logs d'audit suivants — le nom du fichier d'import, un identifiant de ticket support, un numéro de lot de migration.
Définir le contexte
use GrayMatter\AuditChain\Facades\AuditChain; AuditChain::context(['source' => 'csv_import', 'file' => 'users.csv']); // Tous les logs d'audit créés après cela incluent le contexte User::create(['name' => 'Alice', 'email' => 'alice@example.com']); User::create(['name' => 'Bob', 'email' => 'bob@example.com']);
Les deux logs d'audit auront {"source": "csv_import", "file": "users.csv"} dans leur colonne context.
Fusion du contexte
Appeler context() plusieurs fois fusionne les valeurs :
AuditChain::context(['source' => 'api']); AuditChain::context(['request_id' => 'req-abc-123']); // Le contexte est maintenant : {'source': 'api', 'request_id': 'req-abc-123'}
Effacer le contexte
Effacez le contexte lorsque vous avez terminé pour éviter qu'il ne se propage à des opérations non liées :
AuditChain::clearContext();
Un schéma typique dans un contrôleur ou un job :
AuditChain::context(['ticket' => 'SUP-1234']); $user->update(['email' => $newEmail]); AuditChain::clearContext();
Exemple avec un middleware
Pour un contexte au niveau de la requête, définissez-le dans un middleware :
class AuditContextMiddleware { public function handle($request, Closure $next) { AuditChain::context([ 'request_id' => $request->header('X-Request-ID'), ]); $response = $next($request); AuditChain::clearContext(); return $response; } }
Combinaison avec les batches
Le contexte et le batch grouping fonctionnent ensemble. Le contexte est attaché à chaque entrée de log, et le batch UUID les regroupe :
AuditChain::context(['reason' => 'bulk_price_update']); AuditChain::batch(function () use ($products) { foreach ($products as $product) { $product->update(['price' => $product->price * 1.1]); } }); AuditChain::clearContext();
Note sur la chaîne de hash
Comme le batch_uuid, le context est intentionnellement exclu du calcul du hash. Il s'agit de métadonnées opérationnelles et n'affecte pas l'intégrité de la chaîne.