Есть два модуля: 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__);
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Чем обусловлена невозможность писать указатель на метод в скобках? Почему запись указателя на метод должна быть именно
Решаю задачку, не понимаю как сделать замену только в первой половине строки