Selaa lähdekoodia

ZF-7896 support uri query params in routing

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@19983 44c647ce-9c0f-0410-b52a-842ac1e357ba
lcrouch 16 vuotta sitten
vanhempi
commit
b0fff3324c
2 muutettua tiedostoa jossa 30 lisäystä ja 3 poistoa
  1. 3 3
      library/Zend/Rest/Route.php
  2. 27 0
      tests/Zend/Rest/RouteTest.php

+ 3 - 3
library/Zend/Rest/Route.php

@@ -130,8 +130,8 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
         $this->_setRequestKeys();
 
         $path   = $request->getPathInfo();
+        $params = $request->getParams();
         $values = array();
-        $params = array();
         $path   = trim($path, self::URI_DELIMITER);
 
         if ($path != '') {
@@ -170,7 +170,7 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
             //Store path count for method mapping
             $pathElementCount = count($path);
 
-            // Check for leading "special get" URI's
+            // Check for "special get" URI's
             $specialGetTarget = false;
             if ($pathElementCount && array_search($path[0], array('index', 'new')) > -1) {
                 $specialGetTarget = array_shift($path);
@@ -179,7 +179,7 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
                 $params['id'] = $path[$pathElementCount-2];
             } elseif ($pathElementCount == 1) {
                 $params['id'] = urldecode(array_shift($path));
-            } elseif ($pathElementCount == 0 || $pathElementCount > 1) {
+            } elseif ($pathElementCount == 0 && !isset($params['id'])) {
                 $specialGetTarget = 'index';
             }
 

+ 27 - 0
tests/Zend/Rest/RouteTest.php

@@ -178,6 +178,20 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('active', $values['status']);
     }
 
+    public function test_RESTfulApp_GET_user_index_withQueryParams()
+    {
+        $request = $this->_buildRequest('GET', '/user/?changedSince=123456789&status=active');
+        $values = $this->_invokeRouteMatch($request);
+
+        $this->assertType('array', $values);
+        $this->assertTrue(isset($values['module']));
+        $this->assertEquals('default', $values['module']);
+        $this->assertEquals('user', $values['controller']);
+        $this->assertEquals('index', $values['action']);
+        $this->assertEquals(123456789, $values['changedSince']);
+        $this->assertEquals('active', $values['status']);
+    }
+    
     public function test_RESTfulApp_GET_project_byIdentifier()
     {
         $request = $this->_buildRequest('GET', '/project/zendframework');
@@ -191,6 +205,19 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('zendframework', $values['id']);
     }
 
+    public function test_RESTfulApp_GET_project_byIdQueryParam()
+    {
+        $request = $this->_buildRequest('GET', '/project/?id=zendframework');
+        $values = $this->_invokeRouteMatch($request);
+
+        $this->assertType('array', $values);
+        $this->assertTrue(isset($values['module']));
+        $this->assertEquals('default', $values['module']);
+        $this->assertEquals('project', $values['controller']);
+        $this->assertEquals('get', $values['action']);
+        $this->assertEquals('zendframework', $values['id']);
+    }
+    
     public function test_RESTfulApp_GET_project_byIdentifier_urlencoded()
     {
         $request = $this->_buildRequest('GET', '/project/zend+framework');