2012-10-30 33 views
0

我最近開始了一個新的zend框架項目。我通過ZF工具創建了所有的db-table模型,模型,控制器,動作,表單和啓用的佈局。我創建的所有項目都顯示在.zf-project.xml中。奇怪的Zend框架行爲 - 找不到索引控制器動作

然後我設置了默認佈局的第一個頁眉和頁腳。在此佈局的底部是與例如幾個鏈接頁腳NAV部分:

<a href="/howitworks">How it Works</a> 

當該被點擊它應該導航到索引控制器/ howitworksAction但是它不。相反,我得到一個錯誤,說明:

Message: Invalid controller specified (howitworks) 

Stack trace: 

#0 /usr/share/php/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#1 /usr/share/php/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() 
#2 /usr/share/php/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() 
#3 /var/www/vhosts/lokals.mediagiantdesign.com/httpdocs/public/index.php(26): Zend_Application->run() 
#4 {main} 
Request Parameters: 

array (
    'controller' => 'howitworks', 
    'action' => 'index', 
    'module' => 'default', 
) 

如果我強制URL/index/howitworks它工作正常。由於這是我創建的第一個Zend應用程序,因此我完全被拋棄了。在以前的應用程序中,這種鏈接可以直接使用。我還沒有設置自定義路由器,引導程序是準系統。所以我不知道爲什麼這不起作用。

我以爲zend首先尋找一個匹配控制器的控制器,如果沒有發現它在索引中尋找匹配的動作,如果沒有找到,它會認爲它是/ public中的文件。如果是這樣的話,那麼我在這裏錯過了什麼?

在此先感謝。 Rick

回答

1

默認情況下,domain.com/howitworks將在howitworksController中引用indexAction。如果沒有找到,Zend會繼續向錯誤控制器發現如何處理錯誤。它不會默認進入indexcontroller,除非你在errorController中有一個路徑或一些錯誤處理,告訴Zend使用這個後備

+1

Ahhhh ..那就是我錯過了。以前我使用的是修改ErrorController的預構建ACL模塊 - 添加無授權操作,並修改EXCEPTION_NO_CONTROLLER case語句,如下所示: 'code' $ this - > _ forward($ this-> getRequest() - >控制器, '索引'); 休息; – MediaGiantDesign

2

默認的Zend Framework的url結構是:http://yourdomain.com/controller/action/params。每當Zend Framework默認路由一個URL,形式爲「http:// yourdomain/howitworks」時,它會將howitworks視爲控制器,並且由於沒有指定操作,因此將假定indexAction。使用Zend url視圖助手來避免混淆總是很有幫助的。

<a href="<?php echo $this->url(array('controller' => 'index', 'action' => 'howitworks'), null, true); ?>" 

如果你想使用「/ howitworks」點howitworksAction在IndexController中,您將需要建立一個自定義路由在bootstrap.php中。