Zend框架控制器映射

时间:2009-12-20 01:15:22

标签: php zend-framework

我的目录结构设置如下:

Application Root
|-application
|  |--configs
|  |--controllers
|  |  |--helpers
|  |
|  |--layouts
|  |  |--scripts
|  |
|  |--models
|  |--views
|     |--scripts
|        |--index
|        |--test
|
|--data
|  |--session
|
|--public
|--index.php
|--.htaccess

在我的控制器目录中,我有两个控制器:IndexControllerTestController,它们具有相同的内部定义,有两种方法,indexActiontestingAction。当我将浏览器指向localhost/application时,我会得到IndexController.indexAction()的结果,但是当我转到localhost/testlocalhost/testinglocalhost/test或其他任何其他变体时,我收到404 Not Found错误。

我正在使用Zend Framework(我认为是1.9.6),并且我已经确认各种源PHP文件在语法错误方面没有问题。

为什么我会看到这种行为,我该怎么做才能解决它?

修改

我让另一位开发人员向我发送了一个完整的基于Zend的应用程序来比较我的设置。在文件位置或各种配置文件的内容方面没有明显差异。但是,在他的网站上,我只能访问网站的索引页面,但没有内部控制器。他没有那个问题。这可能是我的Apache设置的问题吗?

4 个答案:

答案 0 :(得分:3)

检查Apache配置。似乎.htaccess mod_rewrite无法正常工作

更新1:

还要检查:

    <Directory "/Applications/MAMP/htdocs"> # OR WHAT IS IN YOU CONF FILE

   ... SKIP ...
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
        AllowOverride All

   ... SKIP ...
    </Directory>

用于AllowOverride All选项。没有它.htaccess文件不起作用

答案 1 :(得分:1)

  1. 您应该指向localhost / public,而不是localhost / application。
  2. ZF使用“index”作为默认控制器和操作名称。因此,当您尝试localhost / public时,它会找到localhost/public/index/index,结果为indexController.indexAction。当您指向localhost/test时,它会找到localhost/test/indexlocalhost/testing会产生localhost/testing/index
  3. 因此,您应该尝试 localhost/test/testing

答案 2 :(得分:0)

您应该将浏览器指向localhost/public,其中应包含.htacess文件和index.php。如果您使用已启动的应用程序作为基础,则应设置.htaccess配置,以便将导致404的所有请求最终传递给index.php,然后启动应用程序,加载适当的控制器。

修改
你也有一些错误的功能(我认为)。如果你转到localhost/test,它应该调用测试控制器中的索引操作(除非你在配置中定义了另一个默认操作)。

因此,如果您在测试控制器中有一个名为test的操作,则需要访问:

  

本地主机/公共/测试/检验/

如果您设置了错误控制器,它会有所帮助,因为它可以使调试变得更加容易。例如,当我尝试访问不存在的操作时,我得到了这个(当处于开发模式时):

  

消息:操作“索引”不存在且未被捕获在__call()

中      

堆栈追踪:
  ...

     

请求参数:

     

阵列     'controller'=&gt;字符串'mod'(长度= 3)
    'action'=&gt;字符串'index'(长度= 5)
    'module'=&gt;字符串'default'(长度= 7)

答案 3 :(得分:0)

你必须indexAction TestController才能使用localhost/test等网址