Может войдёшь?
Черновики Написать статью Профиль

События

перевод документация 4.x

  1. 1. Простейшее использование
    1. 1.1. Где регистрировать события
  2. 2. Обработчики по шаблону
  3. 3. Классы-обработчики
  4. 4. Запланированные события
  5. 5. Классы-подписчики
Этот перевод актуален для англоязычной документации на (ветка 4.2) , (ветка 4.1) и (ветка 4.0). Опечатка? Выдели и нажми Ctrl+Enter.

Простейшее использование

Класс PHPEvent содержит простую реализацию концепции «Наблюдатель», что позволяет вам подписываться на уведомления о событиях в вашем приложении.

Подписка на событие

PHP
Event::listen('auth.login', function  ($user) {
  
$user->last_login = new DateTime;

  
$user->save();
});

Возбуждение события

PHP
$event Event::fire('auth.login', array($user));

Подписка на событие с приоритетом

При подписывании на событие вы можете указать приоритет. Обработчики с более высоким приоритетом будут вызваны перед теми, чей приоритет ниже, а обработчики с одинаковым приоритетом будут вызываться в порядке их регистрации.

PHP
Event::listen('auth.login''LoginHandler'10);

Event::listen('auth.login''OtherHandler'5);

Прерывание обработки события

Иногда вам может быть нужно пропустить вызовы других обработчиков события. Вы можете сделать это, вернув значение PHPfalse:

PHP
Event::listen('auth.login', function ($event) {
  
// Обработка события...

  
return false;
});

Где регистрировать события

Итак, вы знаете, как регистрировать события, но вы можете задуматься — где их регистрировать. Не волнуйтесь, это обычный вопрос. К сожалению, на этот вопрос сложно ответить, потому что вы можете регистрировать события практически в любом месте! Но вот несколько советов. Опять же, как и большую часть другого кода начальной загрузки, вы можете зарегистрировать события в одном из ваших старт-файлов, таких как app/start/global.php.

Если ваши старт-файлы слишком разрастаются, вы можете создать отдельный файл app/events.php, который подключается из старт-файла. Это простое решение, которое четко отделяет вашу регистрацию событий от остальной части вашей начальной загрузки. Если вы предпочитаете подход, основанный на классах, вы можете зарегистрировать ваши события в поставщике услуг. Поскольку ни один из этих подходов не является однозначно «правильным», выбирайте удобный для вас подход в зависимости от размера вашего приложения.

Обработчики по шаблону

Регистрация обработчиков по шаблону

При регистрации обработчика вы можете использовать звёздочки (*) для привязки его ко всем подходящим событиям:

PHP
Event::listen('foo.*', function ($param)
{
  
// Обработка событий...
});

Этот обработчик будет вызываться при любом событии, начинающемся с foo..

В версии 4.0 и ранее первым (или последним — неточность в документации?) параметром функция получала PHP$event — полное имя обрабатываемого события — прим. пер.

+ 4.1

добавлено в 4.1 ()

Вы можете использовать метод PHPEvent::firing для определения того, какое именно событие было вызвано:

PHP
Event::listen('foo.*', function($param)
{
  if (
Event::firing() == 'foo.bar')
  {
    
//
  
}
});

Классы-обработчики

В некоторых случаях вы можете захотеть обрабатывать события внутри класса, а не функции-замыкания. Классы-обработчики получаются из IoC-контейнера, поэтому вы можете использовать все его возможности по автоматическому внедрению зависимостей.

Регистрация обработчика в классе

PHP
Event::listen('auth.login''LoginHandler');

Создание обработчика внутри класса

По умолчанию будет вызываться метод PHPhandle() класса PHPLoginHandler:

PHP
class LoginHandler {

  public function 
handle($data)
  {
    
//
  
}

}

Регистрация обработчика в другом методе

Если вы не хотите использовать метод PHPhandle(), вы можете указать другое имя при регистрации:

PHP
Event::listen('auth.login''LoginHandler@onLogin');

Запланированные события

Регистрация цепочки событий

С помощью методов PHPqueue() и PHPflush() вы можете запланировать события к возникновению, но не возбуждать их сразу:

PHP
Event::queue('foo', array($user));

Регистрация «пускателя» (не доступна с версии 4.2 — прим. пер.)

PHP
Event::flusher('foo', function ($user) {
  
//
});

Наконец, вы можете «запустить» все запланированные события методом PHPflush():

PHP
Event::flush('foo');

Классы-подписчики

Определение класса-подписчика

Классы-подписчики содержат обработчики множества событий. Подписчики должны содержать метод PHPsubscribe(), которому будет передан экземпляр обработчика событий для регистрации:

PHP
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');
  }

}

Регистрация класса-подписчика

Как только класс-подписчик определён, он может быть зарегистрирован внутри PHPEvent.

PHP
$subscriber = new UserEventHandler;

Event::subscribe($subscriber);

Вы также можете использовать контейнер IoC для обработки вашего подписчика. Чтобы сделать это, просто передайте имя вашего подписчика в метод PHPsubscribe():

PHP
Event::subscribe('UserEventHandler');

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.