From 121d689e9d47df35eb3358c9d30f576a80f0c120 Mon Sep 17 00:00:00 2001 From: Matt Pinkston Date: Wed, 12 Sep 2012 16:10:58 -0500 Subject: [PATCH] updated Page\Mvc::isActive to check if the controller param was tinkered with by the ModuleRouteListener --- library/Zend/Navigation/Page/Mvc.php | 5 ++++ tests/ZendTest/Navigation/Page/MvcTest.php | 34 ++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/library/Zend/Navigation/Page/Mvc.php b/library/Zend/Navigation/Page/Mvc.php index 27f36b57fb8..0dad3e16c0d 100644 --- a/library/Zend/Navigation/Page/Mvc.php +++ b/library/Zend/Navigation/Page/Mvc.php @@ -13,6 +13,7 @@ use Zend\Mvc\Router\RouteMatch; use Zend\Mvc\Router\RouteStackInterface; use Zend\Navigation\Exception; +use Zend\Mvc\ModuleRouteListener; use Zend\View\Helper\Url as UrlHelper; /** @@ -110,6 +111,10 @@ public function isActive($recursive = false) if ($this->routeMatch instanceof RouteMatch) { $reqParams = $this->routeMatch->getParams(); + if (isset($reqParams[ModuleRouteListener::ORIGINAL_CONTROLLER])) { + $reqParams['controller'] = $reqParams[ModuleRouteListener::ORIGINAL_CONTROLLER]; + } + $myParams = $this->params; if (null !== $this->controller) { $myParams['controller'] = $this->controller; diff --git a/tests/ZendTest/Navigation/Page/MvcTest.php b/tests/ZendTest/Navigation/Page/MvcTest.php index 7f55a916d41..9c3689325e0 100644 --- a/tests/ZendTest/Navigation/Page/MvcTest.php +++ b/tests/ZendTest/Navigation/Page/MvcTest.php @@ -15,6 +15,8 @@ use Zend\Mvc\Router\Http\Regex as RegexRoute; use Zend\Mvc\Router\Http\Literal as LiteralRoute; use Zend\Mvc\Router\Http\TreeRouteStack; +use Zend\Mvc\ModuleRouteListener; +use Zend\Mvc\MvcEvent; use Zend\Navigation\Page; use Zend\Navigation; use ZendTest\Navigation\TestAsset; @@ -122,6 +124,38 @@ public function testIsActiveReturnsTrueWhenMatchingRoute() $this->assertEquals(true, $page->isActive()); } + public function testIsActiveReturnsTrueWhenMatchingRouteWhileUsingModuleRouteListener() + { + $page = new Page\Mvc(array( + 'label' => 'mpinkstonwashere', + 'route' => 'roflcopter', + 'controller' => 'index' + )); + + $route = new LiteralRoute('/roflcopter'); + + $router = new TreeRouteStack; + $router->addRoute('roflcopter', $route); + + $routeMatch = new RouteMatch(array( + ModuleRouteListener::MODULE_NAMESPACE => 'Application\Controller', + 'controller' => 'index' + )); + $routeMatch->setMatchedRouteName('roflcopter'); + + $event = new MvcEvent(); + $event->setRouter($router) + ->setRouteMatch($routeMatch); + + $moduleRouteListener = new ModuleRouteListener(); + $moduleRouteListener->onRoute($event); + + $page->setRouter($event->getRouter()); + $page->setRouteMatch($event->getRouteMatch()); + + $this->assertEquals(true, $page->isActive()); + } + public function testIsActiveReturnsFalseWhenMatchingRouteButNonMatchingParams() { $page = new Page\Mvc(array(