Просмотр исходного кода

ZF-7928 add partial matching logic to support chaining Zend_Rest_Route

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@18509 44c647ce-9c0f-0410-b52a-842ac1e357ba
lcrouch 16 лет назад
Родитель
Сommit
8e43f027b4
2 измененных файлов с 27 добавлено и 2 удалено
  1. 7 2
      library/Zend/Rest/Route.php
  2. 20 0
      tests/Zend/Rest/RouteTest.php

+ 7 - 2
library/Zend/Rest/Route.php

@@ -100,7 +100,7 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
      * @param Zend_Controller_Request_Http $request Request used to match against this routing ruleset
      * @return array An array of assigned values or a false on a mismatch
      */
-    public function match($request)
+    public function match($request, $partial = false)
     {
         if (!$request instanceof Zend_Controller_Request_Http) {
             $request = $this->_front->getRequest();
@@ -200,7 +200,12 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
         }
         $this->_values = $values + $params;
 
-        return $this->_values + $this->_defaults;
+        $result = $this->_values + $this->_defaults;
+        
+        if ($partial && $result)
+        	$this->setMatchedPath($request->getPathInfo());
+        	
+        return $result;
     }
 
     /**

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

@@ -254,6 +254,26 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('lcrouch', $values['id']);
     }
 
+    public function test_RESTfulApp_route_chaining()
+    {
+        $request = $this->_buildRequest('GET', '/api/user/lcrouch');
+        $this->_front->setRequest($request);
+        
+        $router = $this->_front->getRouter();
+    	$router->removeDefaultRoutes();
+
+        $nonRESTRoute = new Zend_Controller_Router_Route('api');
+        $RESTRoute = new Zend_Rest_Route($this->_front);
+        $router->addRoute("api", $nonRESTRoute->chain($RESTRoute));
+
+        $routedRequest = $router->route($request);
+
+        $this->assertEquals("default", $routedRequest->getParam("module"));
+        $this->assertEquals("user", $routedRequest->getParam("controller"));
+        $this->assertEquals("get", $routedRequest->getParam("action"));
+        $this->assertEquals("lcrouch", $routedRequest->getParam("id"));        
+    }
+
     public function test_RESTfulModule_GET_user_index()
     {
         $request = $this->_buildRequest('GET', '/mod/user/index');