Logging activity is important for many reasons, I am not big on relying on packages and everyone and their brothers has a package for logging activity when it just isnt needed.
I am assuming you have laravel installed already writing this. If not, or you are not sure what Laravel is, head over to www.laravel.com and take a gander.
Before we can start, we need to require and install Pushers PHP SDK (https://pusher.com) which can be found at https://github.com/pusher/pusher-http-laravel
Installation
Require this package, with composer (https://getcomposer.org/), in the root directory of your project.
$ composer require pusher/pusher-http-laravel
Add the service provider to config/app.php
in the providers
array. If you're using Laravel 5.5 or greater, there's no need to do this.
Pusher\Laravel\PusherServiceProvider::class
If you want you can use the facade. Add the reference in config/app.php
to your aliases array.
'Pusher' => Pusher\Laravel\Facades\Pusher::class
Configuration
Laravel Pusher requires connection configuration. To get started, you'll need to publish all vendor assets:
$ php artisan vendor:publish --provider="Pusher\Laravel\PusherServiceProvider"
This will create a config/pusher.php
file in your app that you can modify to set your configuration. Also, make sure you check for changes to the original config file in this package between releases.
Finally to finish the Pusher portion head over to their website and grab your keys and place them into Laravel's .env
file.
So to start, we need an event and model. So let us smash the following commands into our console.
php artisan make:event "LogActivity"
php artisan make:model "UserActivity" --migration
Now, lets set up the migration and model
Open App\UserActivity.php
and put the following in it.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class UserActivity extends Model
{
protected $table = 'user_activities';
protected $fillable = [
'user_id',
'type',
'description',
'archived'
];
}
Open App\database\migrations\TimeStamp_create_user_activities.php
and put the following in it.
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUserActivitiesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('user_activities', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->string('type');
$table->longText('description');
$table->boolean('archived')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('user_activities');
}
}
Great, now we got our Model and Migration Setup, one last thing to do before we can start logging activity.
Open App\Events\LogActivity.php
and put the following in it.
<?php
namespace App\Events;
use App\User;
use App\UserActivity;
use Pusher\Laravel\Facades\Pusher;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
class LogActivity
{
use Dispatchable, SerializesModels;
public $user;
public $type;
public $description;
public function __construct($user, $type, $description)
{
$this->data = [
'user' => $user,
'type' => $type,
'description' => $description,
'now' => \Carbon\Carbon::now()->toDateTimeString()
];
$this->storeActivity();
$this->broadcast();
}
private function storeActivity(){
return UserActivity::create([
'user_id' => $this->data['user']->id,
'type' => $this->data['type'],
'description' => $this->data['description']
]);
}
public function broadcast()
{
$this->data['user'] = $this->data['user']->name;
return Pusher::trigger('staff-dashboard', 'logActivity', ['data' => $this->data]);
}
}
Just to break this event down some, storeActivity()
is what performs the operation with the database and broadcast()
is what relays the activity in real-time with Pusher to my admin dashboard, to create a real-time feed of the activity on my websites.
That it, your ready to start using it in action. Whenever you want to log activity you need to make sure you include the class by putting the following at the top of your controller.
use App\Event\LogActivity;
Now to use it just drop the following:
event(new LogActivity(Obj $user, String $type, String $description));
Here are some example use cases:
event(new LogActivity($user, 'Log', $user->name . ' logged in.'));
event(new LogActivity($user, 'Alert', $user->name . ' has sent you a message.'));
event(new LogActivity($user, 'Security', $user->name . ' is probing route user.support.'));
I hope you enjoyed my first post on https://dev.to, let me know what you think or what you use, if it is similar to this.
Top comments (0)