Php 我的框架应该有多少目录分离?

Php 我的框架应该有多少目录分离?,php,model-view-controller,directory-structure,separation-of-concerns,Php,Model View Controller,Directory Structure,Separation Of Concerns,我一直在为我的PHP MVC框架尝试一系列不同的目录结构。在这样做的同时,我想到了一些将应用程序的不同部分彼此分离的原因 例如,假设这是我当前的结构: - index.php - private/ - application/ - ... (MVC stuff. Irrelevant I think...) - config/ - config.php - framework/ - bootstrap.php

我一直在为我的PHP MVC框架尝试一系列不同的目录结构。在这样做的同时,我想到了一些将应用程序的不同部分彼此分离的原因

例如,假设这是我当前的结构:

- index.php
- private/
    - application/
        - ... (MVC stuff. Irrelevant I think...)
    - config/
        - config.php
    - framework/
        - bootstrap.php
        - includes/
        - library/
            - ... (Framework classes)
    - libraries/
        - Zend/
        - PEAR/
 - public/
     - css/
     - images/
按照我的方式,我只需覆盖/private/framework/目录即可更新框架,这不会影响/private/config/中用户的框架配置,也不会影响/private/libraries/中的第三方库

/index.php文件几乎完全用于加载/private/framework/bootstrap.php文件,这意味着更新/private/framework/目录也将更新主引导文件(使我不必更新/index.php文件,该文件将保持原样,因为里面没有太多内容)

此外,应用程序也与框架相关的所有内容分离,因此用户可以在需要时切换/更改/更新其应用程序,而无需担心其他目录

关于将目录彼此分离以使其更易于更新,我在这里的做法正确吗

我在一些框架中看到,它们的框架目录中既有/private/libraries/目录,也有/private/application/目录……但在我看来,如果需要的话,很难更新到框架的新版本。或者我的想法是错误的

如果你感兴趣的话,你可以看到我以前的dir结构。我的新结构有点不同(希望更好…),我的问题也是如此,所以我认为应该发布一个新问题

这个问题并不像我希望的那么小,但是啊,好吧!;)


提前感谢=)

我建议将框架代码与应用程序代码分开。框架应位于一个顶级目录下,应用程序应位于另一个顶级目录下


实际上。。。我建议您看看CakePHP使用的目录结构。

事实上,Cake是我最近研究的框架之一。你的意思是我上面的dir结构显示的分离量与蛋糕不一样吗?除了我的主目录在'private/'目录中之外,这两个结构实际上看起来非常相似。此外,它们的结构有一个“Cake/config/”目录,这意味着如果您更新了“Cake/”目录,“Cake/config/”将被覆盖。。正确的?但我想这不会对Cake有多大影响,因为在那个文件中似乎只设置了一个变量,而且是由框架本身设置的,而不是由用户设置的。是的,这就是我的意思。不过,Cake有两组配置文件。有app/config和cake/config。前者是应用程序配置——数据库、缓存、盐等等。后者包含版本标识符、目录结构配置和一些unicode处理内容。应用程序配置和框架配置之间有着天壤之别。我认为“框架”和“应用程序”应该是顶级目录,在“应用程序”下面的某个地方有“public”。这加强了框架代码和应用程序代码之间更好的分离。我感觉情况就是这样,因为在cake/config中定义的一个变量是用于cake版本的。好的,如果我按照你刚才的建议做了,并且“public/”放在“application/”下,我会使用我的框架来显示所有css/js/img文件,还是使用htaccess将css/js/img调用路由到/application/public/目录?资产,例如css、js和图像都属于应用程序。因此,它们应该位于应用程序目录下。可能是“public”下的某种“资产”目录,或者可能只是“public”下的通用“css”、“js”和“image”。我想说的是,框架应该知道目录结构中的默认资产位置,但是您的应用程序最终要对与既定约定的任何偏差负责。这样,您就可以将“$js->link('jquery.js')”放在一个视图中,它就会知道在哪里查找。因此,当我的应用程序视图调用$js->link('jquery.js')时,生成的链接类似于。。。正确的?这似乎不是我想与全世界分享的链接。将它们放在“public”或服务器的主public目录中会使URL更干净。。。比如'site.com/public/js/jquery.js'或'site.com/js/jquery.js'。这对我来说似乎更有意义,但我可能错了。。