فهرست منبع

ZF-8537 add ini config support to Zend_Rest_Route via getInstance method

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@19975 44c647ce-9c0f-0410-b52a-842ac1e357ba
lcrouch 16 سال پیش
والد
کامیت
839bce4e03
3فایلهای تغییر یافته به همراه56 افزوده شده و 2 حذف شده
  1. 21 0
      library/Zend/Rest/Route.php
  2. 4 0
      tests/Zend/Controller/_files/routes.ini
  3. 31 2
      tests/Zend/Rest/RouteTest.php

+ 21 - 0
library/Zend/Rest/Route.php

@@ -90,6 +90,27 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
     }
     }
 
 
     /**
     /**
+     * Instantiates route based on passed Zend_Config structure
+     */
+    public static function getInstance(Zend_Config $config)
+    {
+        $frontController = Zend_Controller_Front::getInstance();
+        $defaultsArray = array();
+        $restfulConfigArray = array();
+        foreach ($config as $key => $values) {
+        	if ($key == 'type') {
+        		// do nothing
+        	} elseif ($key == 'defaults') {
+        		$defaultsArray = $values->toArray();
+        	} else {
+        		$restfulConfigArray[$key] = explode(',', $values);
+        	}
+        }
+        $instance = new self($frontController, $defaultsArray, $restfulConfigArray);
+        return $instance;
+    }
+
+    /**
      * Matches a user submitted request. Assigns and returns an array of variables
      * Matches a user submitted request. Assigns and returns an array of variables
      * on a successful match.
      * on a successful match.
      *
      *

+ 4 - 0
tests/Zend/Controller/_files/routes.ini

@@ -10,3 +10,7 @@ routes.news.type = "Zend_Controller_Router_Route_Static"
 routes.news.route = "news"
 routes.news.route = "news"
 routes.news.defaults.controller = "news"
 routes.news.defaults.controller = "news"
 routes.news.defaults.action = "list"
 routes.news.defaults.action = "list"
+
+routes.rest.type = Zend_Rest_Route
+routes.rest.defaults.controller = object
+routes.rest.mod = project,user

+ 31 - 2
tests/Zend/Rest/RouteTest.php

@@ -96,6 +96,34 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         $route = new Zend_Rest_Route($this->_front);
         $route = new Zend_Rest_Route($this->_front);
         $this->assertEquals(2, $route->getVersion());
         $this->assertEquals(2, $route->getVersion());
     }
     }
+    
+    public function test_getInstance_fromINIConfig()
+    {
+    	require_once('Zend/Config/Ini.php');
+    	$config = new Zend_Config_Ini(dirname(__FILE__) . '/../Controller/_files/routes.ini', 'testing');
+    	require_once('Zend/Controller/Router/Rewrite.php');
+    	$router = new Zend_Controller_Router_Rewrite();
+    	$router->addConfig($config, 'routes');
+    	$route = $router->getRoute('rest');
+    	$this->assertType('Zend_Rest_Route', $route);
+    	$this->assertEquals('object', $route->getDefault('controller'));
+    	
+    	$request = $this->_buildRequest('GET', '/mod/project');
+    	$values = $this->_invokeRouteMatch($request, array(), $route);
+    	$this->assertEquals('mod', $values['module']);
+    	$this->assertEquals('project', $values['controller']);
+    	$this->assertEquals('index', $values['action']);
+
+    	$request = $this->_buildRequest('POST', '/mod/user');
+    	$values = $this->_invokeRouteMatch($request, array(), $route);
+    	$this->assertEquals('mod', $values['module']);
+    	$this->assertEquals('user', $values['controller']);
+    	$this->assertEquals('post', $values['action']);
+    	
+    	$request = $this->_buildRequest('GET', '/other');
+    	$values = $this->_invokeRouteMatch($request, array(), $route);
+    	$this->assertFalse($values);
+    }
 
 
     public function test_RESTfulApp_defaults()
     public function test_RESTfulApp_defaults()
     {
     {
@@ -522,10 +550,11 @@ class Zend_Rest_RouteTest extends PHPUnit_Framework_TestCase
         return $request;
         return $request;
     }
     }
 
 
-    private function _invokeRouteMatch($request, $config = array())
+    private function _invokeRouteMatch($request, $config = array(), $route = null)
     {
     {
         $this->_front->setRequest($request);
         $this->_front->setRequest($request);
-        $route = new Zend_Rest_Route($this->_front, array(), $config);
+        if ($route == null)
+        	$route = new Zend_Rest_Route($this->_front, array(), $config);
         $values = $route->match($request);
         $values = $route->match($request);
         return $values;
         return $values;
     }
     }