I. TỔNG QUAN
- Hiện nay đã số các ứng dụng đều phát triển tính năng để có thể theo dõi các sự kiện xảy ra trong ứng dụng của nhà phát triển. Và framework có hỗ trợ tính năng đấy , đó là laravel observer
- Laravel Observer được giới thiệu chính thức ở phiên bản laravel 5.x
- Laravel Observer có thể theo dõi hoạt động của người dùng như thêm, sửa, xóa, …. của 1 model
- Nó giúp nhà phát triển có thể làm 1 cơ chế log action của người dùng 1 cách dễ dàng và nhanh chóng
II. NỘI DUNG
Các setup để có thể theo dõi 1 model
- Tạo observer để theo dõi 1 model:
php artisan make:observer ProductObserver --model=Product
- Sau khi tạo xong model chúng ta sẽ thấy trong folder Observers sẽ có 1file ProductObserver.php
<?php
namespace App\Observers;
use App\Models\Product;
class ProductObserver
{
/**
* Handle the User "created" event.
*/
public function created(Product $product): void
{
// ...
}
/**
* Handle the User "updated" event.
*/
public function updated(Product $product): void
{
// ...
}
/**
* Handle the User "deleted" event.
*/
public function deleted(Product $product): void
{
// ...
}
/**
* Handle the User "restored" event.
*/
public function restored(Product $product): void
{
// ...
}
/**
* Handle the User "forceDeleted" event.
*/
public function forceDeleted(Product $product): void
{
// ...
}
}
Trong file này ta có thể làm các nghiệp vụ như log activity của người dùng khi cần với từng sự kiện, trong $product thì sẽ có các function để biết được dữ liệu cũ (getOriginal()) và dữ liệu mới (getChanges())
- Sau khi tạo model xong thì đến bước bắt đầu khai báo laravel observer trong file provider
public function boot(): void
{
Product::observe(ProductObserver::class);
}
Chỉ cần sau vài bước đơn giản như thế này thì chúng ta đã hoàn thành công việc setup 1 cách nhanh chóng , chúng ta có thể viết 1 cái job để đẩy vào queue để tối ưu cách xử lý dữ liệu hoặc custom 1 cách dễ dàng
- Nhược điểm: Tuy nó setup rất nhanh và dễ sử dụng nhưng cũng kèm theo nhược điểm quan trong nhất là đối với create hay update nhiều thì laravel observer không thể log lại dữ liệu thay đổi của bảng
III. KẾT LUẬN
- Đối với task cần nhanh để log 1 dữ liệu thay đổi của 1 bảng thì laravel observer là 1 lựa chọn không thể bỏ qua
- Cần lưu ý đối với các trường hợp insert nhiều hoặc update nhiều thì laravel observer sẽ không hoạt động hiệu quả