2

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

致命错误:在 /usr/share/ZendFrameworkCli/library/Zend/Controller/Dispatcher/Standard.php:248 中未捕获的异常 'Zend_Controller_Dispatcher_Exception' 和消息 'Invalid controller specified (error)' 堆栈跟踪:#0 /usr/share/ZendFrameworkCli /library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(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->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 在 /usr/第 336 行的 share/ZendFrameworkCli/library/Zend/Controller/Plugin/Broker.php

我已经使用 Zend Framework 命令行工具创建了这两个模块,这两个module目录分别在 call和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 的回答用这些行更新我的配置文件,我现在会收到以下错误消息:

致命错误:在 /usr/share/ZendFrameworkCli/library/Zend/Application/Resource/Modules.php:83 中发现未捕获的异常“Zend_Application_Resource_Exception”和消息“为模块“默认”找到引导文件,但未找到引导类“Default_Bootstrap””跟踪:#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('modules')

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} 在第 83 行的 /usr/share/ZendFrameworkCli/library/Zend/Application/Resource/Modules.php 中抛出

它是从哪里获得Default_Bootstrap的类名?!

4

3 回答 3

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"

它解决了这个问题,不幸的是我不够熟练,无法解释/理解原因,抱歉。:-)

我希望它有所帮助。

于 2012-04-24T10:19:57.703 回答
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/

于 2012-01-10T23:33:16.983 回答
0

Martin,当您调用http://example.com/public Zend Framework 将抛出您看到的错误,因为路由器正在寻找一个名为public的控制器。查看 Zend Frame 工作网站的常规方法是调用http://example.comhttp://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 = ""

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

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

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

于 2012-01-15T09:25:34.933 回答