2012-05-10 79 views
0

我正在使用Zend Framework在分鐘編寫應用程序,並使用數據庫驅動的路線。Zend Framework:爲主頁創建路線

我已禁用默認路由,但是這似乎是訪問主頁時導致錯誤。

任何人都可以告訴我如何'重新創建'默認路由,這將需要訪問主頁'/'的用戶索引控制器的索引操作?

編輯 @RockyFord,根據您的回答,我已經添加了如下:

if($this->_frontController->getRequest()->getRequestUri() == '/') { 
    $route= new Zend_Controller_Router_Route(
     '*', 
     array('controller' => 'index', 
       'action'  => 'index') 
    ); 
    $router->addRoute('default', $route); 
) 

但正如你所看到的,我已經測試,看看我們的網頁上使用網址。任何人都可以提出一個更好的方法來做到這一點

我不能使用這種規則,因爲在路由聲明斜槓被剝離出來:

$route = new Zend_Controller_Router_Route_Static('/', array(
    'module' => 'default', 
    'controller' => 'index', 
    'action' => 'index' 
)); 
$router->addRoute('homepage', $route); 

從Zend_Controller_Router_Route_Static摘自:

public function __construct($route, $defaults = array()) 
{ 
    $this->_route = trim($route, self::URI_DELIMITER); 
    $this->_defaults = (array) $defaults; 
} 
+0

如果你已經禁用了默認路由,你爲什麼要重新創建它?您可能希望僅爲主頁添加靜態路由。 –

+0

感謝蒂姆 - 但這就是我想要實現的,添加一個靜態路由到主頁 – Sjwdavies

回答

1

從手冊:

路由定義可以包含一個更多的特殊字符 - 通配符 - repres由'*'符號標記。它用於將類似 的參數收集到缺省模塊路由(在URI中定義的var =>值對)。 以下途徑更多或更少地模仿了模塊路由的行爲:

$route = new Zend_Controller_Router_Route(
    ':module/:controller/:action/*', 
    array('module' => 'default') 
); 
$router->addRoute('default', $route); 

Zend_Controller_Router_Route_Module具有路由的實際定義,如果你的興趣的代碼。

[編輯] 可能:

//not sure if the name will work or not, might need empty string? 
$route = new Zend_Controller_Router_Route_Static(
    '/', 
    array('controller' => 'index', 'action' => 'index') 
); 
//also might need a better name like 'home' 
$router->addRoute('/', $route); 
+0

感謝您的快速回復,但這並不奏效。我仍然在M:\ Zend_Framework \ library \ Zend \ Controller \ Router \ Rewrite.php:408' – Sjwdavies

+0

上收到'exception route'匹配請求'的異常'Zend_Controller_Router_Exception'的錯誤。對不起,我可以告訴你路由,但是我不知道如何設置您的應用程序來使用它。請記住,儘管路線是按相反的順序匹配的,所以更通用的路線需要先註冊。祝你好運。 – RockyFord

+0

謝謝 - 我根據你的意見更新了我的答案 – Sjwdavies

1

主頁路線也只是:

$route = new Zend_Controller_Router_Route_Static('/', array(
    'module' => 'default', 
    'controller' => 'index', 
    'action' => 'index' 
)); 
$router->addRoute('homepage', $route); 

更換哪個控制器和動作你想要的要求去默認/索引/索引值至。

+0

感謝Tim,但是看看Zend_Controller_Router_Route_Static的構造,你會看到它去掉了正斜槓:public function __construct($ route,$ defaults = array( )) $ this - > _ route = trim($ route,self :: URI_DELIMITER); $ this - > _ defaults =(array)$ defaults; }' – Sjwdavies

+0

我已經更新了我的答案 – Sjwdavies

+0

我知道斜槓會被剝離,但是它們在路線匹配時也會這樣做,所以它應該可以工作。這條路線是否仍然會給你「無路線匹配」的錯誤? –