我正在寻找有关如何从应用程序文件夹包含模型,视图,控制器的左侧的常规文件夹结构到应用程序包含模块的右侧基于模块的文件夹结构的分步说明包含各个模块的文件夹,包含自己的模型,控制器.
我说“转换”是因为我认为zend不允许我们从一开始就使用模块架构创建项目,但如果确实如此,那将会膨胀,并且无需手动更改这些文件夹结构.
这是我迄今为止的经历
>当我创建模块zf create module产品时,将生成modules文件夹并在其中生成文件夹产品,并且还会生成该模块的视图,控制器和模型.
>但我还需要将主视图,控制器,模型移动到自己的模块/默认文件夹中.如果我手动创建该文件夹并在那里移动主视图,模型,我在尝试向该默认模块添加新控制器时会遇到错误.错误是它重新生成应用程序中的主要(现在缺少的)视图,并在application / controllers / newcont中插入新控制器,因为它无法识别默认控制器文件夹已被手动移动到application /模块/默认/控制器/.
>所以我的解决方案是zf创建模块默认,然后复制主视图,控制器.它最终看起来一样,但不知何故,zf create module方法有所不同.当我这样做时,新控制器被正确添加到应用程序/模块/默认/控制器而不是应用程序/控制器
问题的一半解决了.但是当我尝试查看应用程序时,我从索引/索引视图中看不到任何内容.我也没有任何错误,但我什么都没看到.我怀疑这是因为应用程序不知道索引/索引视图已移动.
>这曾经位于application / views / scripts / index / index.phtml
>但现在位于application / modules / default / views / scripts / index / index.phtml
我猜我需要对application.ini或bootstrap.PHP或其他一些位置进行更改.那么究竟是什么步骤让这件事顺利完成并让它发挥作用?我正在使用最新的ZF 1.10.8.请从创建一个新的zend项目开始,这样就不会对确切的步骤产生混淆.
$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命令;特别是在重组时.