以下是我尝试按照您的示例(从头开始)所做的事情:
$zf create project .
$zf create module product
$zf create module default
然后我将控制器,模型和视图从./application移动到./application/modules.
接下来我打开了application.ini,并替换了这一行(它告诉ZF在非模块化应用程序中找到控制器的位置):
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
有:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
告诉ZF在哪里可以找到模块.
然后我手动为产品模块创建了一个索引控制器,这样我就可以测试它是否正常工作了.然后我打了http://localhost/index/index以查看默认模块索引操作是否仍然有效,但它没有,而是我得到了错误:
Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller class (“Default_ErrorController”)’ in …
听起来这就是你要去的地方.
有两种方法可以解决此错误,文档很容易产生误导(可能甚至是错误的).它states:
Note that in the default module, controllers do not need a namespace prefix. Thus, in the example above, the controllers in the default module do not need a prefix of ‘Default_’ — they are simply dispatched according to their base controller name: ‘IndexController’ and ‘FooController’. A namespace prefix is used in all other modules, however.
但很明显上面的错误表明ZF正在寻找名为Default_ErrorController的ErrorController类.要解决此问题,您可以执行以下两项操作之一:
>将应用程序/模块/ default / controllers / IndexController.php的类名从IndexController更改为Default_IndexController,将application / modules / default / controllers / ErrorController.php从ErrorController更改为Default_ErrorController
>或删除此行:
resources.frontController.params.prefixDefaultModule =“1”
来自application.ini.这一行告诉ZF在默认模块类上使用’Default_’命名空间,所以没有它它只会查找’IndexController’.我选择了后一个选项,然后http://localhost/index/index按预期工作.
在你的情况下你说你在/ index / index有一个空白页面,这意味着:
>你有一个不同的问题
>您在开发模式下禁用了错误
>您正在生产模式下运行,默认情况下禁用错误(最有可能)
要检查最后一个选项,请打开application.ini并在生产部分暂时将phpSettings.display_errors从0更改为1.如果你得到我上面的错误,希望你能够让一切正常.
我希望这是有帮助的.我只能说是不要过于依赖Zend_Tool来管理您的应用程序 – 它无法完成所有事情,而且通常手动移动事物比尝试通过所有事情更容易. zf命令;特别是在重组时.