2010-03-16 89 views
11

我想從ZF REST URL中提取GET參數。這不是當前的請求,我不想調用URL或執行路由,我只需要參數。我正在尋找一個像parse_url()這樣的實用函數,但是是用於Zend REST格式。有沒有,還是我不得不重新發明輪子?如何解析參數的Zend URL?

我已經嘗試了一些東西,如創建一個新的Zend_Controller_Request_Http,但參數未被填充。它是一個有效的HTTP URL。

編輯:根據要求,樣品Zend公司網址:

http://localhost/index/index/param1/foo/param2/bar 

所以我只是試圖讓參數1和參數出此URL。

編輯#2:我試過,但它似乎不工作:

$request = new Zend_Controller_Request_Http('http://localhost/home/test/param1/foo/param2/bar'); 
$front = Zend_Controller_Front::getInstance(); 
$route = new Zend_Rest_Route($front); 
var_dump($route->match($request)); 
+0

如何提供的網址是什麼? – hobodave 2010-03-16 22:13:58

回答

8

如何$uri = Zend_Uri::factory($yourUrl)「?見Zend_Uri

編輯:
啊,我明白你的意思了。在這種情況下,我相信你應該嘗試戈登的建議。通過路線的match方法運行您的網址。

有可能是與像(不知道雖然)檢索來自路由器的路由方式:

$route = Zend_Controller_Front::getInstance() 
           ->getRouter() 
           ->getRoute('theRouteName'); 

,然後做semething像:

$params = $route->match($yourUrl); 

..這應該給你一個參數數組。

+1

這給了我一個Zend_Uri對象,但接下來我該如何處理該對象以獲取參數? getQuery()返回false,因爲它只查找標準查詢字符串(?param1 = foo&param2 = bar)。 – wizzard 2010-03-16 22:43:53

+1

太棒了。我只是將getRoute($ name)更改爲getCurrentRoute(),並且此解決方案適用於我。非常感謝! – wizzard 2010-03-16 23:53:06

+0

+1。刪除我的,在這裏upvoting。這更直截了當。只是一個小小的註釋:match()將在內部用當前請求對象替換$ yourURL,如果它不是Zend_Controller_Request_Http的實例開始。 – Gordon 2010-03-16 23:59:44

8

如果有人來到這裏,試圖從考慮您routes.ini定義的路由的存儲網址獲取所有PARAMS(包括模塊/控制器/動作),你應該:

/** 
* Code kept big just for example purposes 
* Creates a request object, route and injects back the properties parsed 
*/ 
$url = 'http://www.site.com/module/controller/action/param1/test'; 
$request = new Zend_Controller_Request_Http($url); 
Zend_Controller_Front::getInstance()->getRouter()->route($request); 

// Module name 
$request->getModuleName(); 

// Controller name 
$request->getControllerName(); 

// Action name 
$request->getActionName(); 

// All parameters 
$request->getParams();