Browse Source

[ZF-6579] Setting dispatcher and request when creating module route via getInstance()

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@15458 44c647ce-9c0f-0410-b52a-842ac1e357ba
dasprid 16 years ago
parent
commit
d2d1b81a5a

+ 7 - 2
library/Zend/Controller/Router/Route/Module.php

@@ -78,8 +78,13 @@ class Zend_Controller_Router_Route_Module extends Zend_Controller_Router_Route_A
      */
     public static function getInstance(Zend_Config $config)
     {
-        $defs = ($config->defaults instanceof Zend_Config) ? $config->defaults->toArray() : array();
-        return new self($defs);
+        $frontController = Zend_Controller_Front::getInstance();
+        
+        $defs       = ($config->defaults instanceof Zend_Config) ? $config->defaults->toArray() : array();
+        $dispatcher = $frontController->getDispatcher();
+        $request    = $frontController->getRequest();
+        
+        return new self($defs, $dispatcher, $request);
     }
 
     /**

+ 16 - 0
tests/Zend/Controller/Router/Route/ModuleTest.php

@@ -439,6 +439,22 @@ class Zend_Controller_Router_Route_ModuleTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('bar', $token['foo'][0]);
         $this->assertEquals('baz', $token['foo'][1]);
     }
+    
+    public function testGetInstanceMatching()
+    {
+        $this->route = Zend_Controller_Router_Route_Module::getInstance(new Zend_Config(array()));
+        
+        $this->_request->setModuleKey('m');
+        $this->_request->setControllerKey('c');
+        $this->_request->setActionKey('a');
+
+        $values = $this->route->match('mod/ctrl');
+
+        $this->assertType('array', $values);
+        $this->assertSame('mod', $values['m'], var_export(array_keys($values), 1));
+        $this->assertSame('ctrl', $values['c'], var_export(array_keys($values), 1));
+        $this->assertSame('index', $values['a'], var_export(array_keys($values), 1));
+    }
 }
 
 // Call Zend_Controller_Router_Route_ModuleTest::main() if this source file is executed directly.