Browse Source

Merge pull request #9511 from cakephp/issue-9496

Attach dispatcher filters before firing events.
José Lorenzo Rodríguez 9 years ago
parent
commit
00da73e412
2 changed files with 27 additions and 0 deletions
  1. 4 0
      src/Error/ExceptionRenderer.php
  2. 23 0
      tests/TestCase/Error/ExceptionRendererTest.php

+ 4 - 0
src/Error/ExceptionRenderer.php

@@ -371,6 +371,10 @@ class ExceptionRenderer
     {
         $this->controller->dispatchEvent('Controller.shutdown');
         $dispatcher = DispatcherFactory::create();
+        $eventManager = $dispatcher->eventManager();
+        foreach ($dispatcher->filters() as $filter) {
+            $eventManager->attach($filter);
+        }
         $args = [
             'request' => $this->controller->request,
             'response' => $this->controller->response

+ 23 - 0
tests/TestCase/Error/ExceptionRendererTest.php

@@ -34,6 +34,7 @@ use Cake\Network\Exception\NotFoundException;
 use Cake\Network\Exception\SocketException;
 use Cake\Network\Request;
 use Cake\ORM\Exception\MissingBehaviorException;
+use Cake\Routing\DispatcherFactory;
 use Cake\Routing\Exception\MissingControllerException;
 use Cake\Routing\Router;
 use Cake\TestSuite\TestCase;
@@ -875,6 +876,28 @@ class ExceptionRendererTest extends TestCase
     }
 
     /**
+     * Test that rendering exceptions triggers events
+     * on filters attached to dispatcherfactory
+     *
+     * @return void
+     */
+    public function testRenderShutdownEventsOnDispatcherFacotry()
+    {
+        $filter = $this->getMockBuilder('Cake\Routing\DispatcherFilter')
+            ->setMethods(['afterDispatch'])
+            ->getMock();
+
+        $filter->expects($this->at(0))
+            ->method('afterDispatch');
+
+        DispatcherFactory::add($filter);
+
+        $exception = new Exception('Terrible');
+        $renderer = new ExceptionRenderer($exception);
+        $renderer->render();
+    }
+
+    /**
      * test that subclass methods fire shutdown events.
      *
      * @return void