2010-01-15 2 views
1

Я определил 2 пользовательских маршрута. Один для threads/:id/:name, а другой для threads/tags/:tagName, однако второй конфликт с первым, потому что, если я включаю оба первых первых разрыва и обрабатывает :id буквально как действие, не подчиняясь требованию \d+ (я также пытался использовать чистые маршруты регулярных выражений, см. Нижнюю часть) ,Конфликты Zend Маршруты

Действие «1» не существует и не в ловушке __call()

Я попытался перестановка порядка маршрутов, но если я что то threads/tags/:tagName оленьей кожи правильно захватить название тэга.

Я также попытался отключить маршруты по умолчанию, но маршруты по-прежнему не работают должным образом после этого.

Вот мой маршрут функция инициализации:

protected function _initRoutes() { 
$fc = Zend_Controller_Front::getInstance(); 
$router = $fc->getRouter(); 



$router->addRoute(
    'threads', 
    new Zend_Controller_Router_Route('threads/:id/:name', 
    array(
     'controller' => 'threads', 
     'action'  => 'thread', 
    ), 
    array(
     'id' => '\d+' 
    ) 
    ) 
); 


$router->addRoute(
    'threads', 
    new Zend_Controller_Router_Route('threads/tags/:tagName', 
    array(
     'controller' => 'threads', 
     'action'  => 'tags', 
    ), 
    array(
     'tagName' => '[a-zA-Z]+' 
    ) 
    ) 
); 


} 

Я также попытался использовать чистые регулярки маршрут, но был неудачным, скорее всего, потому что я сделал это неправильно:

$router->addRoute(

    'threads', 

    new Zend_Controller_Router_Route_Regex(
    'threads/(\d+)/([a-zA-Z]+)', 
    array(
     'controller' => 'threads', 
     'action'  => 'thread', 
    ), 
    array(
     1 => 'tagName', 
     2 => 'name' 
    ) 
    ) 
); 

ответ

0

решаемого.

Ах, глупо меня. Первый аргумент addRoute должен быть уникальным именем и не соответствует непосредственно контроллеру, как я предполагал.

Благодаря d__asmoka, lutinvert на #zftalk. Я приму это, как только смогу (минимум 2 дня).

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