jbl*_*lue 8 php zend-framework zend-view
我在寻找如何从正常的文件夹结构继续在左侧一步一步的解释application
文件夹包含models,views,controllers
到基于模块的文件夹结构右侧,其中application
包含modules
其中包含与各个模块的文件夹拥有models,views,controllers
.
我说"转换"是因为我不认为zend让我们从一开始就使用模块架构创建项目,但如果确实如此,那就会膨胀,并且无需手动更改这些文件夹结构.
这是我迄今为止的经历
当我创建一个模块zf create module product
,生成模块和文件夹的文件夹product
在其内部产生并且views,controllers,models
该模块还生成.
但我还需要将main移动views,controllers,models
到modules/default
他们自己的文件夹中.如果我手动创建该文件夹并将其移动到views,models,controllers
那里,我在尝试向该default
模块添加新控制器时会遇到错误.该缺陷是,它重新产生的主要(现在下落不明)views,controllers,models
中application
并插入,在新的控制器application/controllers/newcont
,因为它不承认默认控制器文件夹已被手动移动到application/modules/default/controllers/
.
所以我的解决方案就是zf create module default
在views,models,controllers
那里复制主要内容.它最终看起来一样,但不知何故,这种zf create module
方法有所不同.当我这样做的时候,新的控制器可以正确添加到application/modules/default/controllers
其中application/controllers
问题的一半解决了.但是当我尝试查看应用程序时,我看不到任何index/index
视图.我也没有任何错误,但我什么都没看到.我怀疑这是因为应用程序不知道index/index
视图已移动.
application/views/scripts/index/index.phtml
application/modules/default/views/scripts/index/index.phtml
我猜我需要对application.ini或bootstrap.php或其他位置进行更改.那么究竟是什么步骤让这件事顺利完成并让它发挥作用?我正在使用最新的ZF 1.10.8.请从创建一个新的zend项目开始,这样就不会对确切的步骤产生混淆.
Tim*_*ain 10
以下是我尝试按照您的示例(从头开始)所做的事情:
$ zf create project .
$ zf create module product
$ zf create module default
Run Code Online (Sandbox Code Playgroud)
然后我感动controllers
,models
并views
从./application
到./application/modules
.
接下来我打开了application.ini,并替换了这一行(它告诉ZF在非模块化应用程序中找到控制器的位置):
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
Run Code Online (Sandbox Code Playgroud)
有:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
Run Code Online (Sandbox Code Playgroud)
告诉ZF在哪里找到模块.
然后我手动为产品模块创建了一个索引控制器,这样我就可以测试它是否有效.然后我点击http:// localhost/index/index来查看默认模块索引操作是否仍然有效,但它没有,而是我得到了错误:
致命错误:未捕获异常'Zend_Controller_Dispatcher_Exception',消息'Invalid controller class("Default_ErrorController")'in ...
听起来这就是你要去的地方.
有两种方法可以解决此错误,文档很容易引起误解(可能甚至是错误的).它声明:
请注意,在默认模块中,控制器不需要名称空间前缀.因此,在上面的示例中,默认模块中的控制器不需要前缀'Default_' - 它们只是根据它们的基本控制器名称调度:'IndexController'和'FooController'.但是,名称空间前缀用于所有其他模块.
但显然上面的错误表明ZF正在寻找名为Default_ErrorController的ErrorController类.要解决此问题,您可以执行以下两项操作之一:
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命令; 特别是在重组时.