我正在创建一个非常大的基于PHP MVC的站点,它将拥有一个庞大的php类库,javascripts和许多css文件(更不用说MVC的大量文件)。
有史以来第一次,我实际上是在花时间计划一个干净整洁的目录结构。
您通常使用哪种目录结构,哪些目录结构最容易管理?
答案 0 :(得分:24)
这是我的设置。对于小型 - 非常大的项目(包括社交网络)来说,这对我来说非常有用 这些文件夹都存在于我的主应用程序文件夹中:
所有目录显然都可以包含可以进一步整理文件的子文件夹。例如,'css'文件夹可以包含名为'web'和'mobile'的子文件夹。 'images'文件夹可以包含'user_uploaded'文件夹,然后可以包含`'profile'。当然,您可以根据需要添加文件夹,在一个项目中,我有一个名为“uploaders”的文件夹,它只包含独立的上传脚本。
我还使用便捷方法来帮助构建我想要加载的文件名。例如,我的loadView()将在当前模块目录中查找视图文件,或者如果传递可选的$ module参数,它将特别在该模块的文件夹中查找。
我希望这会有所帮助。
答案 1 :(得分:19)
您应该有一个目录作为Web根目录,其中只有您希望暴露给整个Internet的文件才能驻留。
project/
web/
index.php
css/
js/
images/
config/
lib/
您可以向项目/类似控制器,模块,视图,助手等添加更多子文件夹。这取决于您的框架。
修改强>
如果您使用作曲家(我推荐),也许使用npm和grunt,您的文件结构将会更少:
project/
web/
js/
css/
images/
index.php
cli/
config/
config.php
node_modules/
src/
test/
vendor/
composer.json
composer.lock
packages.json
根据项目需要添加其他文件夹和文件。
对于部署,请使用此结构:
/sites/project/ (project is your projectname)
current (alias to current release folder releases/v1.1.0)
previous (optional alias to previous release folder releases/v1.0.1)
releases/
v1.0.0/ (git checkout of tag v1.0.0)
v1.0.1/ (git checkout of tag v1.0.1)
v1.1.0/ (git checkout of tag v1.1.0)
shared/ (has all your shared files and folders to be aliased in all releases - maybe something like GlusterFS)
制作部署脚本。像这样:
首先备份db或将其复制到新数据库,将git repo复制到带有release标签的新文件夹,获取所有git子模块,运行composer install --no-dev,为共享文件夹和文件设置任何别名上传图像和配置文件,生成带有grunt和更少或等效的js / css,使用标记指向新文件夹的当前别名,运行更新数据库脚本,重启nginx / apache / fpm-php服务,运行测试检查网站是起来。
让脚本返回到以前的版本(或指南,以便您知道该怎么做)。
答案 2 :(得分:5)
对于包含的核心文件: 为approot / INC /
对于数据访问功能,类位于: 为approot / DAO /
对于javascripts: 为approot /脚本/
对于CSS: 为approot /形式/
对于图片: 为approot / IMG /
对于静态内容(通常用于用户个人资料图片或上传的图片): 为approot /静态/
对于缓存: 为approot /高速缓存/
对于模板或视图文件: 为approot /模板/
所有页面文件: 为approot /
的结构我在这里发布的答案来自2009年。多年来发布了更多标准,包括PSR-0,其中涵盖了文件夹结构的主题。我还有一个新的(我觉得它更好)文件夹结构Packfire Framework。
答案 3 :(得分:4)
根据我的经验,你永远不能为此做好计划。您可以尝试遵循框架所做的事情,但我发现我从未完全适应他们的模式。
我建议在最大目录中保留20个文件的经验法则。如果您发现需要更多,只需创建一些子目录并在其中移动常用组件。
答案 4 :(得分:2)
我将codeigniter用于小型和大型项目。 它的MVC功能适中。
这些是针对PHP / HTML文件的。
现在关于其他文件:
有关详细信息,请参阅codeIgniter框架。
这里“codeIgniter”是批准
答案 5 :(得分:1)
这主要是一个偏好问题,快速谷歌搜索会揭示许多不同的项目结构。但如果有一个商定的标准,那将是非常好的。我认为PHP Package Development Standards的这个initiative是一个很好的选择。
这是他们建议的目录结构:
答案 6 :(得分:1)
这是我目前正在使用的结构
public/
assets/ /* js, css, imgs, ... */
index.php
src/
config/ /* for config files */
helpers/ /* for functions */
libraries/ /* for free classes that are not MVC classes */
models/ /* for M in MVC */
views/ /* for V in MVC */
controllers/ /* for C in MVC */
vendor/ /* for vendors files */
uploads/ /* for uploaded images, docs, ... */
答案 7 :(得分:0)
查看symfony 1.4或symfony 2目录结构。选择最直观的方式。
答案 8 :(得分:0)
我认为这取决于项目的规模。这是我主要使用的:
项目/
的index.php
IMG /
CSS /
JS /
意见/
功能/
只要所有项目文件都有条理......
答案 9 :(得分:0)
尽管问题有点老了,但我仍然建议建议我在基于SOA的应用程序中一直在使用的最新可伸缩应用程序结构,并且绝对可以正常工作。
myApplication/
app/
config/
+ this can include custom MVC structure
cli/
docker/
lib/ - most commonly reusable components
logs/
public/ - should contain all publicly exposable web contains
sql/ - db migration stuffs
tests/ - compulsory test
tools/ - application addon tools like any kinds of rulset etc
vendor/