Custom Model Events With Laravel 5.4
Laravel's Eloquent ORM có một một hệ thống tốt để theo dõi và phản hồi bằng các event trên model . Việc đó nó cho phép bạn tạo Observer class để handles thực hiện các action công việc khác khi mà chúng ta thao tác trên model , mặc định thì thằng laravel nó có một số các events chuẩn như là created, ...
Laravel's Eloquent ORM có một một hệ thống tốt để theo dõi và phản hồi bằng các event trên model . Việc đó nó cho phép bạn tạo Observer class để handles thực hiện các action công việc khác khi mà chúng ta thao tác trên model , mặc định thì thằng laravel nó có một số các events chuẩn như là created, updated, deleted, deleting ....., với các event này thì cũng có thể đáp ứng được đa phần các nhu cầu trong laravel. ví dụ như nếu bạn cần phải gửi notifications khi một model mới được tạo ra, hoặc cập nhật một cái gì đó khi một được model được update . Tuy nhiên, như Model của bạn trở nên phức tạp hơn, bạn có thể thấy mình cần các Event khác nhau. Hãy tưởng tượng bạn có một Model nội dung trong đó có statuses, ví dụ draft, pendding, và public. Nếu bạn muốn thực hiện các hành động khác nhau dựa trên Model Status bạn có thể tạo observer trên Model và lắng nghe cho Event Created / Event updated ...... chúng ta có thể check những status và thực hiện khi mà nhưng hành những event này được kích hoạt, Điều này có thể gây lộn xộn và cũng có thể không phản ánh những gì đã xảy ra với các mô hình để di chuyển nó vào tình trạng hiện tại của nó. cho ví dụ này như là việc mà bài viết trong trạng thái "pendding review " bởi vì đó là một dự thảo mà ai đó muốn xuất bản chẳng hạn,hoặc một bài báo được công bố nhưng đã được tình cờ gặp lỗi mà muốn để xem xét? trước khi public ..... Để giải quyết nó thì chúng ta có thể tạo ra custom event ngoài các event mà laravel đa cung cấp trong chúng ta , đầu tiên tạo 1 event cho riêng mình https://laravel.com/docs/5.4/events#registering-events-and-listeners ,
Để thêm một sự kiện mới, bạn chỉ cần thiết lập $$bservables property trên model của bạn.
<?php use IlluminateDatabaseEloquentModel; class MyContentModel extends Model { /** * Additional observable events. */ protected $observables = [ 'sentforreview', 'rejected', ]; }
Điều này cho Laravel rằng có hai model event mới mà observer có thể lắng nghe trong observer của chúng ta, chúng ta có thể liệt kê những bằng cách xác định chức năng thích hợp khi chúng ta làm với bất kỳ sự kiện chuẩn:
<?php namespace AppObservers; class MyContentObserver { public function sentforreview(MyContent $myContent) { // xử lí logic . } public function rejected(MyContent $myContent) { // xử lí logic. } }
vậy là xong việc custom 1 event mới . nguồn : https://www.leewillis.co.uk/custom-model-events-laravel/