Spesso, nella nostra applicazione, abbiamo bisogno di tracciare e notificare le attività degli utenti: ad esempio chi ha effettuato il login, chi ha inserito un determinato contenuto, chi ha modificato qualcosa. Sarebbe comodo memorizzare queste azioni registrando anche “quando” sono avvenute, insieme ad altre informazioni.
Per venire incontro a questa esigenza ti presento ActivityLog, un package che ti permette di registrare con facilità i log per le diverse azioni degli utenti nel database e visualizzarle ad esempio nella dashboard dell’amministratore.
Installazione
Installazione, registrazione del service provider e aliasing
Per installare ActivityLog assicurati di aggiungere all’interno del composer.json
la riga regulus/activity-log tra i require così:
“require”: {
“regulus/activity-log”: “0.3.0”
},
Esegui quindi da riga di comando l’istruzione composer update
.
Composer installerà il package ActivityLog. Non ti rimane che registrare il service provider nel file app/config/app.php
, nell’ array providers
:
‘RegulusActivityLogActivityLogServiceProvider’,
Aggiungi questa riga nell’array aliases
:
‘Activity’ => ‘RegulusActivityLogActivity’,
Migration e Seed del Database
Per eseguire la migration (una singola tabella DB), esegui il comando artisan:
php artisan migrate –package=regulus/activity-log
Pubblicazione del File di Configurazione
Se vuoi personalizzare la configurazione di ActivityLog, è necessario pubblicare il file di configurazione. Esegui dalla riga di comando:
php artisan config:publish regulus/activity-log
Ora potrai modificare il file di configurazione in app/config/packages/regulus/activity-log
.
Uso Base
Registrare le Azioni degli Utenti
Activity::log([
‘contentId’ => $user->id,
‘contentType’ => ‘User’,
‘action’ => ‘Create’,
‘description’ => ‘Created a User’,
‘details’ => ‘Username: ‘.$user->username,
‘updated’ => $id ? true : false,
]);
Grazie al codice appena visto verranno registrate le azioni dell’utente correntemente loggato. L’indirizzo IP verrà salvato in automatico e il flag “developer” sarà impostato se l’utente corrente avrà una variabile di sessione “developer” settata su true.
Una piccola ottimizzazione che ti propongo è quella di scatenare un evento che esegue Activity::log()
ogni volta che lo desideri, magari parametrizzandolo opportunamente.
Prendiamo ad esempio l’azione di login. Ogni volta che l’utente viene autenticato puoi lanciare l’evento in questo modo:
$logevent = Event::fire(‘logactivity.regaction’,array(‘utente’,’login’,’accesso utente’));
E registrare il listener così:
Event::listen(‘logactivity.regaction’, function($contentType, $action, $description)
{
Activity::log(array(
‘contentId’ => Auth::user()->id,
‘contentType’ => $contentType,
‘action’ => $action,
‘description’ => $description,
‘details’ => Auth::user()->nome.’ ‘.Auth::user()->cognome.’ – ‘.Auth::user()->email
));
});
Semplicemente quindi, ti basterà inserire una riga di codice per ogni azione da registrare.
Ogni soluzione alternativa è ben accetta. Segnalacela.
Per oggi è tutto. Alla prossima!