2016-04-25 5 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()); 

    } 
} 

Ich erwartete nie sehenStopPropogation() nicht Kurzschlüsse in ON_DISPATCH Ereignis

"Bevor Render"

Aber es es zeigt.

Wenn ich Response-Objekt von onDispatch() zurückgeben, funktioniert es wie erwartet. Bitte erläutern Sie im Detail, warum stopPropogation() das Auslösen von onRender() Callback nicht verhindert. Wie es möglich ist, es zu arbeiten, ohne Response Objekt zurückzugeben. Ich weiß nicht, wie es intern funktioniert.

Antwort

1

stoppt die weitere Verarbeitung der an das Ereignis angehängten Listener, nicht alle verbleibenden Ereignisse vollständig.

+0

Können Sie sagen, was ist der Unterschied zwischen der Rückgabe von 'Response' Objekt und die Verwendung von setPropogation() und die Rückgabe false von Callback von attatch(). Sie alle nehmen an, kurzzuschließen – varuog