# Events
- [Basic Usage](#basic-usage)
- [Wildcard Listeners](#wildcard-listeners)
- [Using Classes As Listeners](#using-classes-as-listeners)
- [Queued Events](#queued-events)
- [Event Subscribers](#event-subscribers)
## Basic Usage
The Laravel `Event` class provides a simple observer implementation, allowing you to subscribe and listen for events in your application.
**Subscribing To An Event**
Event::listen('user.login', function($user)
{
$user->last_login = new DateTime;
$user->save();
});
**Firing An Event**
$event = Event::fire('user.login', array($user));
You may also specify a priority when subscribing to events. Listeners with higher priority will be run first, while listeners that have the same priority will be run in order of subscription.
**Subscribing To Events With Priority**
Event::listen('user.login', 'LoginHandler', 10);
Event::listen('user.login', 'OtherHandler', 5);
Sometimes, you may wish to stop the propagation of an event to other listeners. You may do so using by returning `false` from your listener:
**Stopping The Propagation Of An Event**
Event::listen('user.login', function($event)
{
// Handle the event...
return false;
});
## Wildcard Listeners
When registering an event listener, you may use asterisks to specify wildcard listeners:
**Registering Wildcard Event Listeners**
Event::listen('foo.*', function($param, $event)
{
// Handle the event...
});
This listener will handle all events that begin with "foo.". Note that the full event name is passed as the last argument to the handler.
## Using Classes As Listeners
In some cases, you may wish to use a class to handle an event rather than a Closure. Class event listeners will be resolved out of the [Laravel IoC container](/docs/ioc), providing you the full power of dependency injection on your listeners.
**Registering A Class Listener**
Event::listen('user.login', 'LoginHandler');
By default, the `handle` method on the `LoginHandler` class will be called:
**Defining An Event Listener Class**
class LoginHandler {
public function handle($data)
{
//
}
}
If you do not wish to use the default `handle` method, you may specify the method that should be subscribed:
**Specifying Which Method To Subscribe**
Event::listen('user.login', 'LoginHandler@onLogin');
## Queued Events
Using the `queue` and `flush` methods, you may "queue" an event for firing, but not fire it immediately:
**Registering A Queued Event**
Event::queue('foo', array($user));
**Registering An Event Flusher**
Event::flusher('foo', function($user)
{
//
});
Finally, you may run the "flusher" and flush all queued events using the `flush` method:
Event::flush('foo');
## Event Subscribers
Event subscribers are classes that may subscribe to multiple events from within the class itself. Subscribers should define a `subscribe` method, which will be passed an event dispatcher instance:
**Defining An Event Subscriber**
class UserEventHandler {
/**
* Handle user login events.
*/
public function onUserLogin($event)
{
//
}
/**
* Handle user logout events.
*/
public function onUserLogout($event)
{
//
}
/**
* Register the listeners for the subscriber.
*
* @param Illuminate\Events\Dispatcher $events
* @return array
*/
public function subscribe($events)
{
$events->listen('user.login', 'UserEventHandler@onUserLogin');
$events->listen('user.logout', 'UserEventHandler@onUserLogout');
}
}
Once the subscriber has been defined, it may be registered with the `Event` class.
**Registering An Event Subscriber**
$subscriber = new UserEventHandler;
Event::subscribe($subscriber);