无法获得模块化Zend Framework项目

时间:2012-01-10 22:52:46

标签: zend-framework zend-framework-modules

我正在尝试使用前端和后端模块设置模块化Zend Framework项目,但我无法让它工作。当我在Web浏览器中访问我的public目录时,收到以下错误消息:

  

致命错误:未捕获的异常'Zend_Controller_Dispatcher_Exception'   消息'指定了无效的控制器(错误)'   /usr/share/ZendFrameworkCli/library/Zend/Controller/Dispatcher/Standard.php:248   堆栈跟踪:#0   /usr/share/ZendFrameworkCli/library/Zend/Controller/Front.php(954):   Zend_Controller_Dispatcher_Standard->调度(对象(的Zend_Controller_Request_Http),   对象(Zend_Controller_Response_Http))#1   /usr/share/ZendFrameworkCli/library/Zend/Application/Bootstrap/Bootstrap.php(97):   Zend_Controller_Front-> dispatch()#2   /usr/share/ZendFrameworkCli/library/Zend/Application.php(366):   Zend_Application_Bootstrap_Bootstrap-> run()#3   /Users/Martin/Dropbox/Repositories/realestatecms/public/index.php(25):   Zend_Application-> run()#4 {main}下一个异常   'Zend_Controller_Exception',消息'指定了无效的控制器   (误差)#0   /usr/share/ZendFrameworkCli/library/Zend/Controller/Front.php(954):   Zend_Controller_Dispatcher_Standard->调度(对象(的Zend_Controller_Request_Http),   对象(Zend_Controller_Response_Http))   /usr/share/ZendFrameworkCli/library/Zend/Controller/Plugin/Broker.php   在336行

我使用Zend Framework命令行工具创建了两个模块,这两个module目录的Bootstrap.php分别有两个类,分别名为Frontend_BootstrapBackend_Bootstrap

我的application.ini文件如下所示:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/frontend/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
...

我做错了什么?当我在浏览器中访问http://example.com/public时,如何让Frontend_IndexController()运行?

编辑:如果我按照Ivan的回答更新我的配置文件,我现在收到此错误消息:

  

致命错误:未捕获的异常'Zend_Application_Resource_Exception'   消息'找到模块的Bootstrap文件“默认”但引导程序   “未找到”类“Default_Bootstrap”   /usr/share/ZendFrameworkCli/library/Zend/Application/Resource/Modules.php:83   堆栈跟踪:#0   /usr/share/ZendFrameworkCli/library/Zend/Application/Bootstrap/BootstrapAbstract.php(683):   Zend_Application_Resource_Modules-> init()#1   /usr/share/ZendFrameworkCli/library/Zend/Application/Bootstrap/BootstrapAbstract.php(626):   Zend_Application_Bootstrap_BootstrapAbstract-> _executeResource( '模块')

     

2 /usr/share/ZendFrameworkCli/library/Zend/Application/Bootstrap/BootstrapAbstract.php(586):

     

Zend_Application_Bootstrap_BootstrapAbstract-> _bootstrap(NULL)#3   /usr/share/ZendFrameworkCli/library/Zend/Application.php(355):   Zend_Application_Bootstrap_BootstrapAbstract-> bootstrap(NULL)#4   /Users/Martin/Dropbox/Repositories/realestatecms/public/index.php(25):   抛出Zend_Application-> bootstrap()#5 {main}   /usr/share/ZendFrameworkCli/library/Zend/Application/Resource/Modules.php   在第83行

Default_Bootstrap作为班级名称从哪里获得?!

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我在此页面上找到了解决方案: http://updel.com/zend-framework-modular-application/

您必须在/MyApp/application/configs/application.ini中注释以下行:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
像这样:

;resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

它解决了这个问题,遗憾的是我不够熟练解释/理解原因,对不起。 : - )

我希望它有所帮助。

答案 1 :(得分:0)

你改变了这一行:

resources.frontController.controllerDirectory = APPLICATION_PATH "/frontend/controllers"

我认为应该是这样的:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

然后,如果您需要其他默认模块/控制器而不是索引/索引,请使用以下配置选项:

resources.frontController.defaultControllerName = "index"
resources.frontController.defaultAction = "index"
resources.frontController.defaultModule = "frontend"

你不应该访问http://yoursite.com/public。这会引起错误。公共目录应该是您的Web DocumentRoot,您可以像这样访问它:http://yoursite.com/

答案 2 :(得分:0)

Martin,当你打电话给 http://example.com/public 时,Zend Framework会抛出你看到的错误,因为路由器正在寻找一个名为控制器 >公共。
查看Zend Frame工作网站的常用方法是调用 http://example.com http://example.com/index.php
所有对应用程序的请求都通过 /application/public/index.php 进行路由。

它看起来像您的原始配置:

resources.frontController.controllerDirectory = APPLICATION_PATH "/frontend/controllers"

可能对您的申请是正确的。

这些是 application.ini 中用于启用模块的典型行

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.moduleControllerDirectoryName = "controllers"
resources.frontController.params.prefixDefaultModule = ""//Frontend may be your default
resources.modules = ""

根据结构的不同,您可能会有一些差异 此外,每个模块目录通常都有助于包含它自己的 bootstrap.php ,它扩展了* Zend_Application_Module_Bootstrap *

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap {
    //put your code here
}

如果这无法解决您的问题,请包含您的目录结构和您的application.ini(您可以省略数据库设置等),如果已从默认值更改,Index.php会很有帮助。
还请包括您的Zend Framework版本。