2016-09-28 70 views
1

我試圖將字符串轉換爲Zend Framework格式的URL。從字符串獲取Zend Framework URLs

例如,我有一個字符串列表

http://example.com/products/category/books 
http://example.com/products/category/computers 
http://example.com/contact 

我想收到的Zend_Controller_Request_Http對象,其中類似的控制器,動作,參數,可以等參數將被承認的名單。

Zend_Controller_Request_Http Object (... [_params:protected] => Array ([controller] => index [action] => products [category] => books [module] => default) ...) 
Zend_Controller_Request_Http Object (... [_params:protected] => Array ([controller] => index [action] => products [category] => computers [module] => default) ...) 
Zend_Controller_Request_Http Object (... [_params:protected] => Array ([controller] => index [action] => contact ...) 

我找到了一些解決方案here(感謝Willy Barro

$url = 'http://example.com/module/controller/action/param1/test'; 
$request = new Zend_Controller_Request_Http($url); 
Zend_Controller_Front::getInstance()->getRouter()->route($request); 

$request->getParams(); 

,它的第一個URL工作正常,但其餘我收到相同的參數:

[controller]=>index, [action]=>products, [category]=>books 
[controller]=>index, [action]=>products, [category]=>books 
[controller]=>index, [action]=>contact, [category]=>books 

外貌像所有我無法改變參數......

也許有另一種方法將字符串轉換爲zf URL。

預先感謝您!

回答

0

因此,在現階段,我沒有找到任何比這更好的解決辦法:

$divideURL = function($url){ 
    $zfURL = []; 
    $request = new Zend_Controller_Request_Http($url); 
    Zend_Controller_Front::getInstance()->getRouter()->route($request)->getParams(); 

    $zfURL['module'] = $request->getModuleName(); 
    $zfURL['controller'] = $request->getControllerName(); 
    $zfURL['action'] = $request->getActionName(); 

    $url = preg_replace("/".preg_quote($this->getRequest()->getScheme() . '://' . $this->getRequest()->getHttpHost(), "/")."/", "", $url); 
    $url = preg_replace("/".preg_quote("/".$zfURL['module'], "/")."/", "", $url); 
    $url = preg_replace("/".preg_quote("/".$zfURL['controller'], "/")."/", "", $url); 
    $url = preg_replace("/".preg_quote("/".$zfURL['action'], "/")."/", "", $url); 

    $urlparts = explode("/", $url); 
    for($i=1; $i<count($urlparts); $i+=2){ 
     if(!empty($urlparts[$i])){ 
      $zfURL[$urlparts[$i]] = $urlparts[$i+1]; 
     } 
    } 

    return $zfURL; 
}; 


print_r($divideURL('http://example.com/products/category/books')); 
print_r($divideURL('http://example.com/products/category/computers')); 
print_r($divideURL('http://example.com/contact')); 

輸出是:

Array ([module] => default [controller] => index [action] => products [category] => books) 
Array ([module] => default [controller] => index [action] => products [category] => computers) 
Array ([module] => default [controller] => index [action] => contact)