Explorar o código

ZF-7594: Fix issues with request object location in Zend_Rest_Route

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@17847 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew %!s(int64=16) %!d(string=hai) anos
pai
achega
e48139ab23
Modificáronse 1 ficheiros con 21 adicións e 12 borrados
  1. 21 12
      library/Zend/Rest/Route.php

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

@@ -64,6 +64,11 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
     protected $_restfulControllers = null;
 
     /**
+     * @var Zend_Controller_Front
+     */
+    protected $_front;
+
+    /**
      * Constructor
      *
      * @param Zend_Controller_Front $front Front Controller object
@@ -72,17 +77,16 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
      */
     public function __construct(Zend_Controller_Front $front,
         array $defaults = array(),
-        array $responders = array())
-    {
+        array $responders = array()
+    ) {
         $this->_defaults = $defaults;
 
-        if($responders)
+        if ($responders) {
             $this->_parseResponders($responders);
-
-        if (isset($front)) {
-            $this->_request = $front->getRequest();
-            $this->_dispatcher = $front->getDispatcher();
         }
+
+        $this->_front      = $front;
+        $this->_dispatcher = $front->getDispatcher();
     }
 
     /**
@@ -98,9 +102,13 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
      */
     public function match($request)
     {
+        if (!$request instanceof Zend_Controller_Request_Http) {
+            $request = $this->_front->getRequest();
+        }
+        $this->_request = $request;
         $this->_setRequestKeys();
 
-        $path = $request->getPathInfo();
+        $path   = $request->getPathInfo();
         $values = array();
         $params = array();
         $path   = trim($path, self::URI_DELIMITER);
@@ -111,7 +119,8 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
 
             // Determine Module
             $moduleName = $this->_defaults[$this->_moduleKey];
-            if ($this->_dispatcher && $this->_dispatcher->isValidModule($path[0])) {
+            $dispatcher = $this->_front->getDispatcher();
+            if ($dispatcher && $dispatcher->isValidModule($path[0])) {
                 $moduleName = $path[0];
                 if ($this->_checkRestfulModule($moduleName)) {
                     $values[$this->_moduleKey] = array_shift($path);
@@ -164,8 +173,8 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
             if ($requestMethod != 'get') {
                 if ($request->getParam('_method')) {
                     $values[$this->_actionKey] = strtolower($request->getParam('_method'));
-                } elseif ( $this->_request->getHeader('X-HTTP-Method-Override') ) {
-                    $values[$this->_actionKey] = strtolower($this->_request->getHeader('X-HTTP-Method-Override'));
+                } elseif ( $request->getHeader('X-HTTP-Method-Override') ) {
+                    $values[$this->_actionKey] = strtolower($request->getHeader('X-HTTP-Method-Override'));
                 } else {
                     $values[$this->_actionKey] = $requestMethod;
                 }
@@ -347,4 +356,4 @@ class Zend_Rest_Route extends Zend_Controller_Router_Route_Module
         return ($this->_restfulModules && array_search($moduleName, $this->_restfulModules) !== false);
     }
 
-}
+}