奇怪的Zend框架行为 - 没有找到索引控制器动作

时间:2012-10-30 22:29:36

标签: zend-framework

我最近开始了一个新的zend框架项目。我通过ZF工具创建了所有db-table模型,模型,控制器,操作,表单和启用的布局。我创建的所有项目都显示在.zf-project.xml中。

然后我开始设置默认布局的第一个页眉和页脚。在此布局的底部是一个页脚导航部分,其中包含多个链接,例如:

<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中的文件。如果是这样,那我在这里错过了什么?

提前致谢。 瑞克

2 个答案:

答案 0 :(得分:2)

默认的Zend Framework网址结构为: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”指向IndexController中的howitworksAction,则需要在bootstrap.php中设置自定义路由。

答案 1 :(得分:1)

默认情况下,URL domain.com/howitworks将在howitworksController中引用indexAction。如果没有找到,Zend将继续向错误控制器查找如何处理错误。默认情况下它不会转到indexcontroller,除非你在errorController中有一个路由或一些错误处理,告诉Zend使用这个回退