Events

Lift provides three attributes to help you manage your model's events.

Listener

The Listener attribute allows you to register a listener function for model events.

A more convenient way of registering a listener function "replacing" laravels event closures for eloquent models, more info Laravel Docs: Eloquent Closures

use Illuminate\Database\Eloquent\Model;
use WendellAdriel\Lift\Attributes\Events\Listener;
use WendellAdriel\Lift\Lift;

final class Product extends Model
{
    use Lift;


    #[Listener]
    public function onCreated(Product $product) {
    	Log::info("Product {$product->name} has been created.");
    }
}

API

#[Listener(event: 'created', queue: true)]

event needs to be one of Laravel's model event e.g: 'created', 'creating', 'updated'. If you set queue to true your handler will be executed async by Laravel's queue system.

โš ๏ธ If your function name is equal to the event name prefixed with "on" like onSaving or onDelete you don't need to specify the event name with the Listener Attribute

Observer

The Observer attribute allows you to register a observer class for model events.

This is used to register a Observer Class with a model explained in more detail here: Laravel Docs: Eloquent Observers

use Illuminate\Database\Eloquent\Model;
use WendellAdriel\Lift\Attributes\Events\Observer;
use WendellAdriel\Lift\Lift;


#[Observer(ProductObserver::class)]
final class Product extends Model
{
    use Lift;

}

API

#[Observer(string $observer)]

With this attribute you can register a observer to your model, in theory you could register as many observer classes as you want.

Dispatches

The Dispatches attribute allows you to dispatch custom Laravel Events.

use Illuminate\Database\Eloquent\Model;
use WendellAdriel\Lift\Attributes\Events\Observer;
use WendellAdriel\Lift\Lift;


#[Dispatches(ProductSaved::class)]
#[Dispatches(ProductHasBeenSetup::class, 'created')]
final class Product extends Model
{
    use Lift;

}

API

#[Dispatches(string $eventClass, string $event = '')]

event needs to be one of Laravel's model event e.g: 'created', 'creating', 'updated', but is optional if your eventClass contains the event string in its name like ProductSaved, saved will be interpreted as the event.

Last updated