2016-04-25 4 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イベントでない短絡

"を前にレンダリング" しかし、それはそれを見せているを見ないように期待していました。

応答オブジェクトをonDispatch()から返すと、期待どおりに動作しています。 stopPropogation()がonRender()コールバックのトリガを妨げない理由を詳細に説明してください。 Responseオブジェクトを返さずに動作させる方法私は内部的にどう働いているのかははっきりしていません。

答えて

1

stopPropagation()は、前記イベントに付随するリスナのさらなる処理を停止し、残りのすべてのイベントを完全に停止することはない。

+0

'Response'オブジェクトを返すことと、setPropogation()を使用してattatch()のコールバックからfalseを返すことの違いは何ですか?彼らはすべて短絡すると考えています – varuog

関連する問題