2010-10-15 39 views
1

我的問題是我想要一些參數值,通過URL傳遞,不會觸發Zend路由,但會導致預設控制器/操作對。Zend_Router參數例外

現在我已經按照我的index.php:沒有最後4個路由器

// *** routing info *** 
$router = Zend_Controller_Front::getInstance()->getRouter(); 
$router->addRoute('showpage', new Zend_Controller_Router_Route('/show/:title', 
                   array('controller' => 'Show', 
                     'action' => 'page'))); 
// annoying exceptions :(
$router->addRoute('addshow', new Zend_Controller_Router_Route('/show/add', 
                   array('controller' => 'Show', 
                     'action' => 'add'))); 
$router->addRoute('saveshow', new Zend_Controller_Router_Route('/show/save', 
                   array('controller' => 'Show', 
                     'action' => 'save'))); 
$router->addRoute('addepisode', new Zend_Controller_Router_Route('/show/addEpisode', 
                   array('controller' => 'Show', 
                     'action' => 'addEpisode'))); 
$router->addRoute('saveepisode', new Zend_Controller_Router_Route('/show/saveEpisode', 
                   array('controller' => 'Show', 
                     'action' => 'saveEpisode'))); 

,URL /show/add導致show/page,攜帶標題== '添加'。 請大家,非常感謝您的幫助。

回答

1

您可以使用正則表達式來拒絕添加,保存,addEpisode和saveEpisode

$router->addRoute(
    'showpage', 
    new Zend_Controller_Router_Route(
    '/show/:title', 
    array(
     'controller' => 'show', 
     'action' => 'page' 
    ), 
    array(
     'title' => '(?:(?!add)(?!save)(?!addEpisode)(?!saveEpisode).)+' 
    ) 
) 
) 
0

首先,使用Zend_Controller_Router_Route_Static作爲靜態路由。

其次,我敢肯定你不需要包含主要的正斜槓,儘管我不確定這是否是一個問題。

由於路線匹配的順序相反,你應該工作(我認爲)。對於任何不匹配「saveEpisode」,「addEpisode」,「save」或「add」的內容,它都應該落入「showpage」路徑。

我能想到的唯一的其他的事情將是使「SHOWPAGE」路線更具體的,像

'show/page/:title'