【问题标题】:Strange Zend Framework Behavior - not finding index controller actions奇怪的 Zend 框架行为 - 找不到索引控制器操作
【发布时间】:2012-10-30 22:29:35
【问题描述】:

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

提前致谢。 瑞克

【问题讨论】:

    标签: zend-framework


    【解决方案1】:

    默认的 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); ?>"
    

    如果你想在IndexController中使用“/howitworks”指向howitworksAction,你需要在bootstrap.php中设置自定义路由。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • Ahhhh .. 这就是我所缺少的。以前我使用的是修改 ErrorController 的预构建 ACL 模块 - 添加无授权操作,并修改 EXCEPTION_NO_CONTROLLER 案例语句如下:code $this->_forward($this->getRequest()->controller, '指数');休息;
      猜你喜欢
      • 2012-06-15
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      相关资源
      最近更新 更多