我正在寻找一些帮助来正确设置我的应用程序的自动加载器,引导程序等,以实现类似于以下应用程序文件结构:
/application
/configs
application.ini
/controllers
/models
/User.php // Model_User
/modules
/blog
/admin
/controllers
/IndexController.php
/models
/User.php // Model_User
/views
/blocks
/menu.phtml
/helpers
/CoolMenu.php
/layouts
/layout.phtml
/scripts
/index
/index.phtml
/list.phtml
/themes
/some-custom-theme
/helpers
/layouts
/layout.phtml
/scripts
/index
/index.phtml
/list.phtml
/users
/index.phtml
/list.phtml
/list.ajax.phtml
/views
/blocks
/layouts
/scripts
/themes
/some-custom-theme
/blocks
/layouts
/scripts
/helpers
/Bootstrap.php
/library
/Zend
/MyCompany
/Model
/Api
/Abstract.php
/public
/css
/js
/images
/themes
/some-custom-theme
/css
/js
/images
这里的想法当然是基本的“应用程序”结构可以被模块覆盖,并且视图也可以通过主题在任一级别被覆盖。
我的一些问题是,尽可能贴近Zend Framework概念和“理想”,尽可能保持简单和优雅,尽可能使用“主流”ZF方法,你会如何处理以下情况?
您将如何设置自动加载器并包含清晰处理可能的应用程序控制器,模型,视图和其他应用程序资源的路径(但不一定! )被模块资源覆盖?
您如何初始化视图,以便能够使用主题资源覆盖每个场景中的默认视图资源?
我知道这是一个相当普遍的,开放式的请求,但我现在已经研究和试验了几天,我尝试了十几种不同的方法,我似乎无法忍受让它全部工作。我尝试的所有东西似乎都破坏了其他东西,或者我在ZF中找不到合适的方法,或者其他什么。我有点想从新的角度听一些新鲜的想法。我不期待一个完整的解决方案,我只需要一些可靠的想法让我思考一个更有用的方向!
PS:我正在使用ZF 1.11
答案 0 :(得分:1)
视图路径是简单的[1]位。您可以添加其他脚本路径,并以LIFO顺序检查这些路径,因此对于每个模块,您将拥有标准路径,然后是主题路径。我确定我过去已经将代码发布到了Stackoverflow,所以如果你为试图做主题的人搜索旧问题你应该找到它。布局以类似的方式工作,虽然我只是在应用程序级别而不是模块级别对这些进行了覆盖。
对于模型,我无法在您的示例中看到被覆盖模型的确切位置,但一般来说,PHP将使用包含路径为您完成大部分工作。因此,您只需将“覆盖”目录添加到包含路径的开头,PHP将检查每个目录,直到找到该类。如果要求比您要求的要复杂一些,您可以考虑编写自己的自动加载器(请参阅:http://framework.zend.com/manual/en/zend.loader.autoloader.html#zend.loader.autoloader.interface)。
控制器是一个尴尬的位(因为我记得)它们不是传统意义上的自动加载,它们的文件名和位置只是根据提供给前端控制器的路径来假设。通过检查引导程序是否存在类似/modules/admin/themes/foo/controllers
之类的内容来覆盖模块的所有控制器是非常容易的,如果存在,则将其用作模块的控制器路径/modules/admin/controllers
。这可能是一个全有或全无的方法 - 如果你想覆盖模块的控制器,你必须全部完成。如果你在Zend_Controller_Front类中挖掘,你或许可以找到更好的方法。
[1]在这里很容易相对 - 所有这些东西都要求你对ZF很满意。