Есть два модуля: Application и Blog, в каждом из них есть файл Module.php со своей логикой.
В этих файлах есть метод onBootstrap в нем я запускаю EventManager на слушание события MvcEvent::EVENT_RENDER и ожидаю что модули Application и Blog не будут пресекается, но на деле обрабатывают оба метода, как это изменить? Хочу что бы в каждый модуль был приватным
Примерный листинг Module.php
namespace Application;
use Zend\Mvc\MvcEvent;
class Module
{
/**
* Listen to the bootstrap event
*
* @param MvcEvent $e
*/
public function onBootstrap(MvcEvent $e)
{
/**
* настройки EVENT_RENDER
*/
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach(MvcEvent::EVENT_RENDER, [$this, 'onRender']);
}
public function onRender($e)
{
var_dump(__METHOD__);
}
Решение: Создаём метод init() в нем регистрируем общий SharedManager слушателя, вешаем его на MvcEvent::EVENT_DISPATCH для текущего __NAMESPACE__, после чего повешенный наш метод, будет отрабатываться только для текущего модуля
Файл: Module.php
<?php
namespace Application;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Zend\ModuleManager\ModuleManagerInterface;
use Zend\Mvc\MvcEvent;
/**
*/
class Module implements ConfigProviderInterface
{
public function getConfig()
{
return array_merge(
require __DIR__ . '/../config/module.config.php',
require __DIR__ . '/../config/router.config.php'
);
}
public function init(ModuleManagerInterface $manager)
{
var_dump(__METHOD__);
$eventManager = $manager->getEventManager();
// Register the event listener method.
$sharedEventManager = $eventManager->getSharedManager();
$sharedEventManager->attach(__NAMESPACE__, MvcEvent::EVENT_DISPATCH,
[$this, 'onDispatch'], 100);
}
public function onDispatch(MvcEvent $e)
{
var_dump(__METHOD__);
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach(MvcEvent::EVENT_RENDER, [$this, 'onRender']);
$eventManager->attach(MvcEvent::EVENT_RENDER_ERROR, [$this, 'onRenderError']);
$eventManager->attach(MvcEvent::EVENT_FINISH, [$this, 'onFinish']);
}
public function onRender($e)
{
var_dump(__METHOD__);
}
public function onRenderError($e)
{
var_dump(__METHOD__);
}
public function onFinish($e)
{
var_dump(__METHOD__);
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости