2016-04-25 2 views
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 случае

"Перед Рендер"

Но это показывает его.

Если я возвращаю объект Response из onDispatch(), он работает как ожидалось. Пожалуйста, подробно объясните, почему stopPropogation() не предотвращает запуск обратного вызова onRender(). Как можно заставить его работать, не возвращая Response объект. Я немного не понимаю, как он работает внутри страны.

ответ

1

stopPropagation() останавливает дальнейшую обработку слушателей, прикрепленных к указанному событию, а не все остальные события целиком.

+0

Можете ли вы сказать, в чем разница между возвратом объекта 'Response' и использованием setPropogation() и возвратом false из обратного вызова attatch(). Все они предполагают короткое замыкание – varuog

Смежные вопросы