{{TOC}} {{DOCVER 4.0=0da300f6445bec5a70d007f503834fce957b065b 16.10.2014 04:19:00, 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 05:21:00, 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15}} == Простейшее использование == Класс %%Event%% содержит простую реализацию ((ВП:Наблюдатель (шаблон проектирования)==концепции "Наблюдатель")), что позволяет вам подписываться на уведомления о событиях в вашем приложении. **Подписка на событие** %% Event::listen('auth.login', function ($user) { $user->last_login = new DateTime; $user->save(); }); %% **Возбуждение события** %% $event = Event::fire('auth.login', array($user)); %% **Подписка на событие с приоритетом** При подписывании на событие вы можете указать приоритет. Обработчики с более высоким приоритетом будут вызваны перед теми, чей приоритет ниже, а обработчики с одинаковым приоритетом будут вызываться в порядке их регистрации. %% Event::listen('auth.login', 'LoginHandler', 10); Event::listen('auth.login', 'OtherHandler', 5); %% **Прерывание обработки события** Иногда вам может быть нужно пропустить вызовы других обработчиков события. Вы можете сделать это, вернув значение %%false%%: %% Event::listen('auth.login', function ($event) { // Обработка события... return false; }); %% === Где регистрировать события == Итак, вы знаете, как регистрировать события, но вы можете задуматься - //где// их регистрировать. Не волнуйтесь, это обычный вопрос. К сожалению, на этот вопрос сложно ответить, потому что вы можете регистрировать события практически в любом месте! Но вот несколько советов. Опять же, как и большую часть другого кода начальной загрузки, вы можете зарегистрировать события в одном из ваших старт-файлов, таких как %%(t)app/start/global.php%%. Если ваши старт-файлы слишком разрастаются, вы можете создать отдельный файл %%(t)app/events.php%%, который подключается из старт-файла. Это простое решение, которое четко отделяет вашу регистрацию событий от остальной части вашей начальной загрузки. Если вы предпочитаете подход, основанный на классах, вы можете зарегистрировать ваши события в ((/docs/v4/ioc#поставщики поставщике услуг)). Поскольку ни один из этих подходов не является однозначно "правильным", выбирайте удобный для вас подход в зависимости от размера вашего приложения. == Обработчики по шаблону == **Регистрация обработчиков по шаблону** При регистрации обработчика вы можете использовать звёздочки (%%(t)*%%) для привязки его ко всем подходящим событиям: %% Event::listen('foo.*', function ($param) { // Обработка событий... }); %% Этот обработчик будет вызываться при любом событии, начинающемся с %%(t)foo.%%. .(tl_note) В версии 4.0 и ранее первым (или последним - неточность в документации?) параметром функция получала %%$event%% - полное имя обрабатываемого события - //прим. пер.// %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 05:21:00) Вы можете использовать метод %%Event::firing%% для определения того, какое именно событие было вызвано: ~%% Event::listen('foo.*', function($param) { if (Event::firing() == 'foo.bar') { // } }); ~%% %% == Классы-обработчики == В некоторых случаях вы можете захотеть обрабатывать события внутри класса, а не функции-замыкания. Классы-обработчики получаются из ((docs/v4/ioc IoC-контейнера)), поэтому вы можете использовать все его возможности по автоматическому внедрению зависимостей. **Регистрация обработчика в классе** %% Event::listen('auth.login', 'LoginHandler'); %% **Создание обработчика внутри класса** По умолчанию будет вызываться метод %%handle()%% класса %%LoginHandler%%: %% class LoginHandler { public function handle($data) { // } } %% **Регистрация обработчика в другом методе** Если вы не хотите использовать метод %%handle()%%, вы можете указать другое имя при регистрации: %% Event::listen('auth.login', 'LoginHandler@onLogin'); %% == Запланированные события == **Регистрация цепочки событий** С помощью методов %%queue()%% и %%flush()%% вы можете запланировать события к возникновению, но не возбуждать их сразу: %% Event::queue('foo', array($user)); %% **Регистрация "пускателя" (!!(tl_note) не доступна с версии 4.2 - //прим. пер.//!!)** %% Event::flusher('foo', function ($user) { // }); %% Наконец, вы можете "запустить" все запланированные события методом %%flush()%%: %% Event::flush('foo'); %% == Классы-подписчики == **Определение класса-подписчика** Классы-подписчики содержат обработчики множества событий. Подписчики должны содержать метод %%subscribe()%%, которому будет передан экземпляр обработчика событий для регистрации: %% class UserEventHandler { /** * Обработка событий входа пользователя в систему. */ public function onUserLogin($event) { // } /** * Обработка событий выхода из системы. */ public function onUserLogout($event) { // } /** * Регистрация всех обработчиков данного подписчика. * * @param Illuminate\Events\Dispatcher $events * @return array */ public function subscribe($events) { $events->listen('auth.login', 'UserEventHandler@onUserLogin'); $events->listen('auth.logout', 'UserEventHandler@onUserLogout'); } } %% **Регистрация класса-подписчика** Как только класс-подписчик определён, он может быть зарегистрирован внутри %%Event%%. %% $subscriber = new UserEventHandler; Event::subscribe($subscriber); %% Вы также можете использовать ((/docs/v4/ioc контейнер IoC)) для обработки вашего подписчика. Чтобы сделать это, просто передайте имя вашего подписчика в метод %%subscribe()%%: %% Event::subscribe('UserEventHandler'); %%