# Actions as listeners

# How are attributes filled?

By default, all of the event’s public properties will be used as attributes.

class ProductCreated
{
    public $title;
    public $body;
    
    // ...
}

You can override that behaviour by defining the getAttributesFromEvent method.

// Event
class ProductCreated
{
    public $product;
}

// Listener
class PublishANewArticle extends Action
{
    public function getAttributesFromEvent($event)
    {
        return [
            'title' => '[New product] ' . $event->product->name,
            'body' => $event->product->description,
        ];
    }
}

This can also work with events defined as strings.

// Event
Event::listen('product_created', PublishANewArticle::class);

// Dispatch
event('product_created', ['My SaaS app', 'Lorem ipsum']);

// Listener
class PublishANewArticle extends Action
{
    public function getAttributesFromEvent($title, $description)
    {
        return [
            'title' => "[New product] $title",
            'body' => $description,
        ];
    }

    // ...
}