0

我最近开始了一个新的 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中的一个文件。如果是这样,那么我在这里缺少什么?

提前致谢。瑞克

4

2 回答 2

2

Zend Framework 的默认 URL 结构是:http: //yourdomain.com/controller/action/params。每当 Zend Framework 默认路由 URL 时,形式为“http://yourdomain/howitworks”,它会将 howitworks 视为控制器,并且由于未指定任何操作,因此将假定 indexAction。使用 Zend url view helper 来避免混淆总是有帮助的。

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

If you want to use "/howitworks" point to howitworksAction in the IndexController, you will need to set up a custom route in the bootstrap.php.

于 2012-10-31T00:30:06.720 回答
1

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

于 2012-10-30T23:21:18.057 回答