我正在尝试使用前端和后端模块设置模块化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_Bootstrap
和Backend_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
作为班级名称从哪里获得?!
答案 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版本。