瀏覽代碼

ZF-10536 & ZF-8812: fixes to Chain route and tests for empty static routes

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@23184 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 15 年之前
父節點
當前提交
435f7395b0
共有 2 個文件被更改,包括 47 次插入3 次删除
  1. 1 1
      library/Zend/Controller/Router/Route/Chain.php
  2. 46 2
      tests/Zend/Controller/Router/Route/ChainTest.php

+ 1 - 1
library/Zend/Controller/Router/Route/Chain.php

@@ -77,7 +77,7 @@ class Zend_Controller_Router_Route_Chain extends Zend_Controller_Router_Route_Ab
         $values  = array();
 
         foreach ($this->_routes as $key => $route) {
-            if ($key > 0 && $matchedPath !== null) {
+            if ($key > 0 && $matchedPath !== null && $subPath !== '' && $subPath !== false) {
                 $separator = substr($subPath, 0, strlen($this->_separators[$key]));
 
                 if ($separator !== $this->_separators[$key]) {

+ 46 - 2
tests/Zend/Controller/Router/Route/ChainTest.php

@@ -32,6 +32,9 @@ require_once 'Zend/Config.php';
 /** Zend_Controller_Router_Rewrite */
 require_once 'Zend/Controller/Router/Rewrite.php';
 
+/** Zend_Controller_Dispatcher_Standard */
+require_once 'Zend/Controller/Dispatcher/Standard.php';
+
 /** Zend_Controller_Router_Route_Chain */
 require_once 'Zend/Controller/Router/Route/Chain.php';
 
@@ -116,6 +119,31 @@ class Zend_Controller_Router_Route_ChainTest extends PHPUnit_Framework_TestCase
         $this->assertEquals(2, $res['bar']);
     }
 
+    /**
+     * @group ZF-8812
+     */
+    public function testChainingMatchToDefaultValues()
+    {
+        $foo = new Zend_Controller_Router_Route(
+            ':foo',
+            array('foo' => 'bar'),
+            array('foo' => '[a-z]{3}')
+        );
+        
+        $bar = new Zend_Controller_Router_Route_Module(array(
+            'module' => 0,
+            'controller' => 1,
+            'action' => 2
+        ));
+        
+        $chain = $foo->chain($bar);
+
+        $request = new Zend_Controller_Router_ChainTest_Request('http://www.zend.com/');
+        $res = $chain->match($request);
+
+        $this->assertTrue(is_array($res), 'Route did not match to default values.');
+    }
+
     public function testChainingShortcutMatch()
     {
         $foo = new Zend_Controller_Router_Route_Hostname('www.zend.com', array('foo' => 1));
@@ -426,8 +454,8 @@ class Zend_Controller_Router_Route_ChainTest extends PHPUnit_Framework_TestCase
         $router = new Zend_Controller_Router_Rewrite();
         $front = Zend_Controller_Front::getInstance();
         $front->resetInstance();
-        $front->setDispatcher(new Zend_Controller_Router_RewriteTest_Dispatcher());
-        $front->setRequest(new Zend_Controller_Router_RewriteTest_Request());
+        $front->setDispatcher(new Zend_Controller_Router_ChainTest_Dispatcher());
+        $front->setRequest(new Zend_Controller_Router_ChainTest_Request());
         $router->setFrontController($front);
 
         $router->addConfig(new Zend_Config($routes));
@@ -683,6 +711,22 @@ class Zend_Controller_Router_ChainTest_Request extends Zend_Controller_Request_H
     }
 }
 
+/**
+ * Zend_Controller_Router_ChainTest_Dispatcher - dispatcher object for router testing
+ */
+class Zend_Controller_Router_ChainTest_Dispatcher extends Zend_Controller_Dispatcher_Standard
+{
+    public function getDefaultControllerName()
+    {
+        return 'defctrl';
+    }
+
+    public function getDefaultAction()
+    {
+        return 'defact';
+    }
+}
+
 if (PHPUnit_MAIN_METHOD == "Zend_Controller_Router_Route_ChainTest::main") {
     Zend_Controller_Router_Route_ChainTest::main();
 }