Zend Framework HMVC架构有帮助吗?

时间:2011-11-08 00:17:24

标签: zend-framework

我正在寻找一些帮助来正确设置我的应用程序的自动加载器,引导程序等,以实现类似于以下应用程序文件结构:

/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方法,你会如何处理以下情况?

  1. 您将如何设置自动加载器并包含清晰处理可能的应用程序控制器,模型,视图和其他应用程序资源的路径(但不一定! )被模块资源覆盖?

  2. 您如何初始化视图,以便能够使用主题资源覆盖每个场景中的默认视图资源?

  3. 我知道这是一个相当普遍的,开放式的请求,但我现在已经研究和试验了几天,我尝试了十几种不同的方法,我似乎无法忍受让它全部工作。我尝试的所有东西似乎都破坏了其他东西,或者我在ZF中找不到合适的方法,或者其他什么。我有点想从新的角度听一些新鲜的想法。我期待一个完整的解决方案,我只需要一些可靠的想法让我思考一个更有用的方向!

    PS:我正在使用ZF 1.11

1 个答案:

答案 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很满意。