Laravel Activitylog - Ghi lại hoạt động nguời dùng trong Laravel

Laravel Activitylog

spatie/laravel-activity

1. Giới thiệu

spatie/laravel-activity là một thư viện được cung cấp hỗ trợ các việc lưu lại hoạt động của người dùng trong dự án của bạn. Nó sẽ tự động tạo những sự kiện để lưu trữ lại trong model của dự án. Mọi hoạt động sẽ được lưu trữ trong bảng activity_log.

VD:

activity()->log('Look mum, I logged something');

Để lấy tất cả bản ghi của table activitiy_log bạn cần sử dụng:

Spatie\Activitylog\Models\Activity

Activity::all();

Hoặc bạn có thể tham khảo thêm các ví dụ trong event logging.

Để xem thay đổi các thuộc tính của một bản ghi: $activity->changes

[
   'attributes' => [
        'name' => 'original name',
        'text' => 'Lorum',
    ],
    'old' => [
        'name' => 'updated name',
        'text' => 'Lorum',
    ],
];

2. Yêu cầu cài đặt

activitylog yêu cầu bắt buộc dùng PHP 7.0+Laravel 5.2 hoặc hơn.

Nếu bạn đang dùng laravel 5.xx hãy xem https://github.com/spatie/activitylog .

3. Cài đặt

Sử dụng composer

composer require spatie/laravel-activitylog

Tiếp theo cần thêm provider vào file config/app.php

// config/app.php
'providers' => [
    ...
    Spatie\Activitylog\ActivitylogServiceProvider::class,
];

Tiếp theo là gõ lệnh sau để sinh ra model + table trong laravel

php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations"

Và chạy lệnh php artisan migrate.

Hoặc bạn cũng có thể tùy chỉnh config bằng cach:

php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="config"

Và đây là nội dung file config

return [

    /*
     * When set to false, no activities will be saved to database.
     */
    'enabled' => env('ACTIVITY_LOGGER_ENABLED', true),

    /**
     * When running the clean-command all recording activities older than
     * the number of days specified here will be deleted.
     */
    'delete_records_older_than_days' => 365,

    /**
     * When not specifying a log name when logging activity
     * we'll using this log name.
     */
    'default_log_name' => 'default',

    /**
     * You can specify an auth driver here that gets user models.
     * When this is null we'll use the default Laravel auth driver.
     */
    'default_auth_driver' => null,

    /**
     * When set to true, the subject returns soft deleted models.
     */
     'subject_returns_soft_deleted_models' => false,

    /**
     * This model will be used to log activity. The only requirement is that
     * it should be or extend the Spatie\Activitylog\Models\Activity model.
     */
    'activity_model' => \Spatie\Activitylog\Models\Activity::class,
];

4. Cách sử dụng cơ bản

1. Base

Như đã nói ở trên thì:

activity()->log('Look mum, I logged something');

đây là câu lệnh đơn giản nhất đê ghi lại một bản ghi hoạt động trong dự án của bạn.

Và lấy tất cả dữ liệu hoạt động của bạn bằng:

$lastActivity = Activity::all()->last(); //returns the last logged activity

$lastActivity->description; //returns 'Look mum, I logged something';

2. Cài đặt loại hành động

Bạn có thể chỉ định đối tượng nào hoạt động được thực hiện bằng cách sử dụng performedOn:

activity()
   ->performedOn($someContentModel)
   ->log('edited');

$lastActivity = Activity::all()->last(); //returns the last logged activity

$lastActivity->subject; //returns the model that was passed to `performedOn`;

3. Cài đặt điều kiện

Bạn có thể thiết lập ai là người tạo ra hoạt động này bằng cách sử dụng method causeBy:

activity()
   ->causedBy($userModel)
   ->performedOn($someContentModel)
   ->log('edited');
   
$lastActivity = Activity::all()->last(); //returns the last logged activity

$lastActivity->causer; //returns the model that was passed to `causedBy`;   

5. Kết luận

Activitylog là một thư viện có sẵn trong laravel hỗ trợ dev trong việc quản lý sự thay đổi của dữ liệu trong ứng dụng, có thể biết được ai là người sửa xóa một dữ liệu và hỗ trợ mạnh trong việc lấy lại bản ghi trước đó.

Cám ơn bạn đã theo dõi.

Nguồn: