Содержание
основы
События обеспечивают хороший способ построения не связанных приложений, и позволяет встраивать плагины в ядро приложения без изменения кода.
Включение события
Для включения события, просто сообщите классу Event имя события, которое нужно включить:
Включение события:
$responses = Event::fire('loaded');
Заметьте, что мы присваиваем результат метода fire переменной. Этот метод возвращает массив, содержащий ответы от всех прослушиваемых событий.
Иногда требуется включить событие, но получить только первый ответ от него:
Включение события для получения только первого ответа:
$response = Event::first('loaded');
Прримечание: Метод first прослушивает все события, но возвращает только первый ответ.
Метод Event::until выполняет процедуру обработки события до тех пор, пока не придет первый ненулевой ответ.
Включение события до получения ненулевого ответа:
$response = Event::until('loaded');
Прослушивание событий
Какая польза от использования событий, которые никто не слушает? Регистрация обработчика события:
Регистрация обработчика события:
Event::listen('loaded', function()
{
// I'm executed on the "loaded" event!
});
Анонимная функция обеспечивает исполнения кода при каждом возникновении события:
Очередь событий
Вы можете создать очередь событий, не исполняя их обработчики немедленно. Т.е. поставить собтия в очередь. Для этого существуют методы queue
и flush
. Сначала ставим событие в очередь с уникальным идентификатором:
Регистрация очереди событий:
Event::queue('foo', $user->id, array($user));
Этот метод принимает три параметра. Первый определяет имя очереди, второй - уникальный идентификатор ключа в очереди, и третий - массив параметров для передачи обработчику очереди.
Далее, мы регистрируем обработчик для очереди foo
:
Регистрация обработчика:
Event::flusher('foo', function($key, $user)
{
//
});
Обработчик принимает два аргумента. Первый, уникальный идентификатор обрабатываемой очереди. Второй (и другие, при необходимости) передает параметры для события в очереди.
Наконец, мы можем запустить обработчик очереди и обработать все события в очереди при помощи метода flush
:
Event::flush('foo');
События Laravel
Здесь собраны события ядра Laravel:
Событие, отрабатываемое при старте бандла:
Event::listen('laravel.started: bundle', function() {});
Событие, отрабатываемое при запросе к базе данных:
Event::listen('laravel.query', function($sql, $bindings, $time) {});
Событие, отрабатываемое перед передачей ответа в браузер:
Event::listen('laravel.done', function($response) {});
Событие, отрабатываемое при логировании сообщения с использованием класса Log:
Event::listen('laravel.log', function($type, $message) {});