2016-09-28 72 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)