1
<?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事件短路
「之前渲染」
但它顯示它。
如果我從onDispatch()返回Response對象,它按照預期工作。請詳細解釋爲什麼stopPropogation()不能阻止觸發onRender()回調。如何在不返回Response
對象的情況下使其工作。我有點不清楚它的內部工作。
你能告訴返回'Response'對象和使用setPropogation()並從attatch()的回調返回false之間有什麼區別。他們都假設短路 – varuog