<?php
namespace Inventionary;
use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;
class Module
{
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$eventManager->attach(MvcEvent::EVENT_DISPATCH, [$this, 'OnDispatch']);
$eventManager->attach(MvcEvent::EVENT_RENDER, [$this, 'OnRender']);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
public function onDispatch(MvcEvent $e)
{
xdebug_var_dump("Route Dispatch");
xdebug_var_dump($e->getRouteMatch());
$e->stopPropagation(true);
xdebug_var_dump($e->propagationIsStopped());
//return new \Zend\Http\Response();
}
public function onRender(MvcEvent $e)
{
xdebug_var_dump("Before Render");
xdebug_var_dump($e->getRequest()->getMetadata());
xdebug_var_dump($e->getRouteMatch());
}
}
Я ожидал, что никогда не увидитStopPropogation() не короткое замыкание в ON_DISPATCH случае
"Перед Рендер"
Но это показывает его.
Если я возвращаю объект Response из onDispatch(), он работает как ожидалось. Пожалуйста, подробно объясните, почему stopPropogation() не предотвращает запуск обратного вызова onRender(). Как можно заставить его работать, не возвращая Response
объект. Я немного не понимаю, как он работает внутри страны.
Можете ли вы сказать, в чем разница между возвратом объекта 'Response' и использованием setPropogation() и возвратом false из обратного вызова attatch(). Все они предполагают короткое замыкание – varuog