2016-09-28 3 views
1

Я пытаюсь преобразовать строки в URL-адреса формата Zend Framework.Получение URL-адресов Zend Framework из строк

Например, у меня есть список строк

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

Я хочу, чтобы получить список с объектами Zend_Controller_Request_Http, где будут признаны параметры, такие как контроллер, действие, Params и др.

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 

ВЫГЛЯДИТ как все, что я не могу изменить параметры вообще ...

Возможно, есть другой способ конвертировать строку в URL-адрес zf.

Спасибо заранее!

ответ

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) 
Смежные вопросы