# Events ## Contents - [The Basics](#the-basics) - [Firing Events](#firing-events) - [Listening To Events](#listening-to-events) - [Laravel Events](#laravel-events) ## The Basics Events can provide a great away to build de-coupled applications, and allow plug-ins to tap into the core of your application without modifying its code. ## Firing Events To fire an event, just tell the **Event** class the name of the event you want to fire: #### Firing an event: $responses = Event::fire('loaded'); Notice that we assigned the result of the **fire** method to a variable. This method will return an array containing the responses of all the event's listeners. Sometimes you may want to fire an event, but just get the first response. Here's how: #### Firing an event and retrieving the first response: $response = Event::first('loaded'); > **Note:** The **first** method will still fire all of the handlers listening to the event, but will only return the first response. The **Event::until** method will execute the event handlers until the first non-null response is returned. #### Firing an event until the first non-null response: $response = Event::until('loaded'); ## Listening To Events So, what good are events if nobody is listening? Register an event handler that will be called when an event fires: #### Registering an event handler: Event::listen('loaded', function() { // I'm executed on the "loaded" event! }); The Closure we provided to the method will be executed each time the "loaded" event is fired. ## Laravel Events There are several events that are fired by the Laravel core. Here they are: #### Event fired when a bundle is started: Event::listen('laravel.started: bundle', function() {}); #### Event fired when a database query is executed: Event::listen('laravel.query', function($sql, $bindings, $time) {}); #### Event fired right before response is sent to browser: Event::listen('laravel.done', function($response) {}); #### Event fired when a messaged is logged using the Log class: Event::listen('laravel.log', function($type, $message) {});