почему первое действие / первый маршрут открывается для любого URL-адреса в маршрутизации в Zend framework 1.12

#php #zend-framework #url-rewriting #url-routing

#php #zend-framework #url-перезапись #url-маршрутизация

Вопрос:

Я написал следующий код в bootstrap.php файл

     protected function _initRoutes() {
     $routers = Zend_Controller_Front::getInstance()->getRouter();
     $adminadd = new Zend_Controller_Router_Route('/:cityadd/', array('module' => 'user', 'controller' => 'city', 'action' => 'add'));
$routers->addRoute('addcity', $adminadd);

     $routing = Zend_Controller_Front::getInstance()->getRouter();
     $adminedit = new Zend_Controller_Router_Route('/:cityedit/', array('module' => 'user', 'controller' => 'city', 'action' => 'edit'));
$routing->addRoute('edit-city', $adminedit);
    }
  

Мое название проекта demo

В моем браузере, когда я указываю URL-адрес, http://localhost/demo/public/cityadd открывается страница добавления страницы действий, т.е,

 View script for controller City and script/action name add
  

Когда я указываю URL-адрес, http://localhost/demo/public/cityedit также открывается страница добавления страницы действий, т.е,

 View script for controller City and script/action name add
  

вместо этого он должен быть перенаправлен на View script for controller City and script/action name edit

Почему открывается одна и та же страница или почему страница перенаправляется на одно и то же действие для любого заданного URL

Ответ №1:

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

Попробуйте написать свои маршруты без двоеточия:

 protected function _initRoutes()
{
    $routers = Zend_Controller_Front::getInstance()->getRouter();
    $adminadd = new Zend_Controller_Router_Route('/cityadd/', array('module' => 'user', 'controller' => 'city', 'action' => 'add'));
    $routers->addRoute('addcity', $adminadd);

    $routing = Zend_Controller_Front::getInstance()->getRouter();
    $adminedit = new Zend_Controller_Router_Route('/cityedit/', array('module' => 'user', 'controller' => 'city', 'action' => 'edit'));
    $routing->addRoute('edit-city', $adminedit);
}