ZF: маршрутизация.Как правильно составить маршрут? - PullRequest
1 голос
/ 25 сентября 2011

У меня есть несколько шаблонов:

/admin/
/somecode1/somecode2/
/staticpage.htm

Попытка войти в / admin /. Делать следующее:

$router->addRoutes(array(
      'adminsys' => new Zend_Controller_Router_Route('/:module/:controller/:action/*', array('module' => 'admin',  'controller' => 'index', 'action' => 'index')),
      'page_catalog' => new Zend_Controller_Router_Route('/:code/:page', array('module' => 'default', 'controller' => 'Staticcatalog', 'action' => 'index', 'code' => '', 'page' => '')),
      'static'       => new Zend_Controller_Router_Route_Regex('([\wА-Яа-я\-\_]+)\.(htm|html)', array('module' => 'default', 'controller' => 'static', 'action' => 'index')
));

также я попытался изменить 'adminsys' на:

 'adminsys' => new Zend_Controller_Router_Route('/admin/:controller/:action/*', array('module' => 'admin',  'controller' => 'index', 'action' => 'index')),

или

'adminsys' => new Zend_Controller_Router_Route('/admin/*', array('module' => 'admin',  'controller' => 'index', 'action' => 'index')),

Но все время он идет по 'page_catalog'. Если я это прокомментирую, я могу ввести / admin /. Но не с 'page_catalog'.

Что я здесь не так делаю?

1 Ответ

1 голос
/ 25 сентября 2011

Когда вы определяете маршруты, вы сначала определяете общий маршрут, а затем переходите к более конкретным.Маршрутизатор берет ваши маршруты «последним первым» и останавливается на первом подходящем.

Это означает, что если / admin также может работать для маршрута «page_catalog», он будет использовать этот, прежде чемпытаясь сопоставить маршрут 'adminsys'.И в этом-то и дело, «/ admin» может быть URL-адресом «page_catalog», где :code param будет «admin».

Второй вариант маршрута adminsys хорош, вам просто нужноэто последний из ваших маршрутов, чтобы избежать поиска более общего маршрута:

$router->addRoutes(array(
      'page_catalog' => new Zend_Controller_Router_Route('/:code/:page', array('module' => 'default', 'controller' => 'Staticcatalog', 'action' => 'index', 'code' => '', 'page' => '')),
      'static'       => new Zend_Controller_Router_Route_Regex('([\wА-Яа-я\-\_]+)\.(htm|html)', array('module' => 'default', 'controller' => 'static', 'action' => 'index')),
      'adminsys' => new Zend_Controller_Router_Route('/admin/:controller/:action/*', array('module' => 'admin',  'controller' => 'index', 'action' => 'index'))
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...