Мои маршруты Zend Framework не укладываются должным образом - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть один модуль (сайт) в моем приложении Zend Framework.Сначала я проверяю, существует ли контроллер / действие, а если нет, то пытаюсь сопоставить URL с некоторыми пользовательскими маршрутами.

Мой код в _bootstrap.php выглядит следующим образом:

$router = $this->frontController->getRouter();
$router->removeDefaultRoutes();

// catalog category product route
$route = new Zend_Controller_Router_Route(
        ':categoryIdent/:productIdent',
        array(
            'action'        => 'view',
            'controller'    => 'product',
            'module'        => 'site',
            'categoryIdent' => '',
            'productIdent' => ''
        ),
        array(
            'categoryIdent' => '[a-zA-Z-_0-9]+',
            'productIdent'  => '[a-zA-Z-_0-9]+'
        )
);

$router->addRoute('catalog_category_product', $route);


$router->addDefaultRoutes();

Я знаю, что маршруты в Zend Framework совпадают в обратном направлении.Поэтому я попробовал следующие URL:

  1. example.com / site / index / index -> OK (выполнение action / controller => index / index)
  2. example.com / bags/ bag-7 -> OK (выполнение действия / controller => product / view)
  3. example.com / index / index -> WRONG (выполнение действия / controller => product / view, но это должно бытьчасть из маршрутов по умолчанию, которые определены в конце)

Это проблема, и я не понимаю, почему маршрут контроллера / действия по умолчанию не применяется.

1 Ответ

0 голосов
/ 22 февраля 2012

Ваш третий пример соответствует шаблону вашего catalog_category_product-route.Вот почему он отправляется в product / view.

Вы можете попытаться добавить требования к: productIdent и / или: categoryIdent, чтобы индекс / индекс не соответствовал этим требованиям.

В справочном руководстве объясняется, как устанавливать переменные требования .

редактировать: я пропустил, что вы уже выставили требования.Но индекс / индекс все еще совпадает: categoryIndent /: productIndent.Вы можете использовать следующее регулярное выражение для: productIndent, предполагая, что это всегда слово - тире - число:

'/^([a-z]+-[0-9]+)$/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...