Ver Fonte

ZF-10964
Fixed Zend_Rest_Route to urldecode where appropriate


git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@24012 44c647ce-9c0f-0410-b52a-842ac1e357ba

ralph há 14 anos atrás
pai
commit
694010ef39
2 ficheiros alterados com 21 adições e 20 exclusões
  1. 4 4
      library/Zend/Rest/Route.php
  2. 17 16
      tests/Zend/Rest/RouteTest.php

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

@@ -176,9 +176,9 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
                 $specialGetTarget = array_shift($path);
             } elseif ($pathElementCount && $path[$pathElementCount-1] == 'edit') {
                 $specialGetTarget = 'edit';
-                $params['id'] = $path[$pathElementCount-2];
+                $params['id'] = urldecode($path[$pathElementCount-2]);
             } elseif ($pathElementCount == 1) {
-                $params['id'] = array_shift($path);
+                $params['id'] = urldecode(array_shift($path));
             } elseif ($pathElementCount == 0 && !isset($params['id'])) {
                 $specialGetTarget = 'index';
             }
@@ -186,9 +186,9 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
             // Digest URI params
             if ($numSegs = count($path)) {
                 for ($i = 0; $i < $numSegs; $i = $i + 2) {
-                    $key = $path[$i];
+                    $key = urldecode($path[$i]);
                     $val = isset($path[$i + 1]) ? $path[$i + 1] : null;
-                    $params[$key] = $val;
+                    $params[$key] = urldecode($val);
                 }
             }
 

+ 17 - 16
tests/Zend/Rest/RouteTest.php

@@ -198,7 +198,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('default', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('index', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('the+email@address'));
+        $this->assertEquals('email+test@example.com', $values['the+email@address']);
     }
 
     public function test_RESTfulApp_GET_project_byIdentifier()
@@ -253,7 +253,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('default', $values['module']);
         $this->assertEquals('project', $values['controller']);
         $this->assertEquals('get', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulApp_HEAD_project_byIdentifier()
@@ -281,7 +281,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('default', $values['module']);
         $this->assertEquals('project', $values['controller']);
         $this->assertEquals('head', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulApp_GET_project_edit()
@@ -310,7 +310,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('default', $values['module']);
         $this->assertEquals('project', $values['controller']);
         $this->assertEquals('edit', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulApp_PUT_user_byIdentifier()
@@ -339,7 +339,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('mod', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('put', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulApp_POST_user()
@@ -380,7 +380,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('mod', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('delete', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulApp_POST_user_with_identifier_doesPUT()
@@ -409,7 +409,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('mod', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('put', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulApp_overload_POST_with_method_param_PUT()
@@ -453,7 +453,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('mod', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('delete', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulApp_route_chaining()
@@ -526,7 +526,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('mod', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('index', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('the+email@address'));
+        $this->assertEquals('email+test@example.com', $values['the+email@address']);
     }
 
     public function test_RESTfulModule_GET_user()
@@ -556,7 +556,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('mod', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('get', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulModule_POST_user()
@@ -609,7 +609,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('mod', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('put', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulModule_DELETE_user_byIdentifier()
@@ -640,7 +640,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('mod', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('delete', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulController_GET_user_index()
@@ -701,7 +701,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('mod', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('get', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulController_POST_user()
@@ -772,7 +772,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('mod', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('put', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_RESTfulController_DELETE_user_byIdentifier()
@@ -803,7 +803,7 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('mod', $values['module']);
         $this->assertEquals('user', $values['controller']);
         $this->assertEquals('delete', $values['action']);
-        $this->assertEquals('email+test@example.com', $request->getParam('id'));
+        $this->assertEquals('email+test@example.com', $values['id']);
     }
 
     public function test_assemble_plain_ignores_action()
@@ -958,8 +958,9 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
     private function _invokeRouteMatch($request, $config = array(), $route = null)
     {
         $this->_front->setRequest($request);
-        if ($route == null)
+        if ($route == null) {
         	$route = new Zend_Rest_Route($this->_front, array(), $config);
+        }
         $values = $route->match($request);
         return $values;
     }