2013-09-02 3 views
0

Мне нужно создать несколько пользовательских маршрутов в моем ZF v.1.12:Zend Framework Маршруты

protected function _initRouter() { 
    $this->bootstrap('FrontController'); 
    $this->bootstrap('locale'); 

    $front = Zend_Controller_Front::getInstance(); 
    $router = $front->getRouter(); 

    $router->addRoute ('fastproduct', new Zend_Controller_Router_Route_Regex ('(.+)\.html', array ('module' => 'default', 'controller' => 'products', 'action' => 'get'), array (1 => 'q'), '%s.html')); 
    $router->addRoute ('products', new Zend_Controller_Router_Route_Regex ('products/(.+)\.html', array ('module' => 'default', 'controller' => 'products', 'action' => 'get'), array (1 => 'q'), 'products/%s.html')); 
    $router->addRoute ('categories', new Zend_Controller_Router_Route_Regex ('categories/(.+)\.html', array ('module' => 'default', 'controller' => 'categories', 'action' => 'list'), array (1 => 'q'), 'categories/%s.html')); 
    $router->addRoute ('cms', new Zend_Controller_Router_Route_Regex ('cms/(.+)\.html', array ('module' => 'default', 'controller' => 'cms', 'action' => 'page'), array (1 => 'url'), 'cms/%s.html')); 
    $router->addRoute ('wiki', new Zend_Controller_Router_Route_Regex ('wiki/(.+)\.html', array ('module' => 'default', 'controller' => 'wiki', 'action' => 'help'), array (1 => 'uri'), 'wiki/%s.html')); 
    $router->addRoute ('tlds', new Zend_Controller_Router_Route_Regex ('tlds/(.+)\.html', array ('module' => 'default', 'controller' => 'tlds', 'action' => 'index'), array (1 => 'uri'), 'tlds/%s.html')); 

    return $router; 
} 

Теперь если я называю эти ссылки, работает хорошо:

# http://www.mydomain.com/productname.html 
# http://www.mydomain.com/products/productname.html 
# http://www.mydomain.com/categories/hosting.html 
# http://www.mydomain.com/cms/mypage.html 
# http://www.mydomain.com/wiki/myhelp.html 
# http://www.mydomain.com/tlds/com.html 
# http://www.mydomain.com/admin/ 

но как есть Я должен добавить язык ко всем этим ссылкам?

# http://www.mydomain.com/it/productname.html 
# http://www.mydomain.com/it/products/productname.html 
# http://www.mydomain.com/it/categories/hosting.html 
# http://www.mydomain.com/it/cms/mypage.html 
# http://www.mydomain.com/it/wiki/myhelp.html 
# http://www.mydomain.com/it/tlds/com.html 
# http://www.mydomain.com/it/admin 

благодарит за вашу любезную помощь.

ответ

0

Ваш маршрут по умолчанию имеет необязательные параметры, поэтому route_4, route_3 и route_2 не нужны - избавиться от них. Вам все еще нужен последний, но вы неправильно используете цепочку маршрутов. Измените это на:

$routeLang = new Zend_Controller_Router_Route_Regex('([a-z]{2})', array('module' => 'default', 'lang' => 'en', 'controller' => 'index', 'action' => 'index'), array (1 => 'lang'), '%s'); 
$router->addRoute('route_1', $routeLang); 

Возможно, вы также захотите использовать более описательные названия маршрутов для добавляемых маршрутов.

Если он по-прежнему не работает, обновите свой вопрос, указав обновленную конфигурацию маршрута и сообщите информацию о том, как вы проверяете параметры согласованного маршрута.

+0

Привет, Тим спасибо за помощь. Я обновляю код, и он работает. Я обновил вопрос, как вы сказали мне. Еще раз спасибо – Michelangelo

+0

'$ router-> addRoute ('route_1', $ defaultRoute);' неверно - вы должны проходить '$ routeLang' там (см. Мой ответ). Остальные маршруты, о которых вы прокомментировали, выглядят нормально - если вы раскомментируете их, что работает, а что нет? –

+0

Моя вина! Неверная вставка кода! Если я выполнил «WIKI» с помощью http://www.mydomain.com/wiki, маршрут рассмотрит его как модуль, а не как контроллер. – Michelangelo

Смежные вопросы