Общее
Я мог бы предложить документацию Symfony 2 для EventDispatcher в качестве хорошей отправной точки, предполагая, что вы хотите предоставить пользовательские события, а не пользовательский диспетчер событий.
Внутренние компоненты Symfony2 - Диспетчер событий
Местоположение событий
С точки зрения местоположения, папка «Событие» внутриподходящий комплект - хороший выбор.Вполне вероятно, что фактическая отправка события будет происходить только в контексте пакета, тогда как слушатели могут находиться в другом месте.Однако это отдельная тема, которая имеет минимальное значение, поскольку они просто подписываются на строковое имя события (например, «store.order», чтобы позаимствовать пример документации) и требуют только знания интерфейса / типа события.
Таким образом, у вас может быть событие под названием «Foo» в пакете «Bar» в пространстве имен «Zap»:
namespace Zap\Bar\Event;
use Symfony\Component\EventDispatcher\Event;
class FooEvent extends Event
{
// ...
}
Когда вы приедете, чтобы отправить событие из вашего пакета, вы можете использоватьидентификатор события 'zap.bar.foo', и, конечно, вы можете затем зарегистрировать слушателей из других мест, чтобы получать уведомления об этом идентификаторе, как считаете нужным.
Доступ к диспетчеру событий
Если вы хотите получить доступ к первичному экземпляру EventDispatcher, получите доступ к контейнеру внедрения зависимостей и получите службу event_dispatcher.Простой подход заключается в том, чтобы ваш класс расширил «ContainerAware», а затем получил диспетчер с помощью
$dispatcher = $this->container->get('event_dispatcher');