【发布时间】:2015-07-14 08:25:07
【问题描述】:
我正在尝试找出一个 php 网站的目录结构。
网站将使用:
- 一个非常基础的php MVC框架(即MinimalMVC,不过我在找一个通用的解决方案,所以框架大概可以忽略)
- composer 管理 PHP 依赖项
- 用于样式的 SCSS
- gulp 编译 SCSS(用于开发构建),并缩小和连接 JS 和 CSS 输出以及缩小图像等(仅用于部署构建)
- Travis CI 用于 CI 内容
因此,经过大量思考、计划和查看我想出的不同类型目录结构的问题后,我仍然找不到符合我标准的东西:
-
gulp deploy应该能够生成一个部署文件夹,当将其放入 Apache 服务器上的/var/www/html/目录时,应该可以正常工作TM注意:MinimalMVC(以及 CodeIgniter 和其他类似框架)要求它们的
index.php文件位于根目录中,app和sys文件夹位于同一目录中
1234563基本上,PHP 部分不会保留 gulp,我希望它不受 gulp 的影响。
现在,我的想法有点乱,因为我一直在想这个太多,所以请原谅我这个问题也有点乱,但基本问题是,目录结构应该如何看?
一个想法:
.
|-- composer.json
|-- gulpfile.js
|-- package.json
|-- src
| |-- app
| | |-- controllers
| | |-- models
| | `-- <other_framework_stuff>
| |-- assets
| | |-- css
| | |-- img
| | |-- js
| | `-- raw
| | `-- scss
| |-- index.php
| `-- sys
| `-- <framework_stuff>
|-- test
`-- vendor
`-- <composer_stuff>
在这种结构中,开发人员只能在/src 目录中工作。 SCSS 从/src/assets/raw/scss/ 编译到src/assets/css。这样,PHP 仍然从构建过程中移除。当尝试生成deploy 目录时,src 文件夹被复制过来,/src/assets/raw/(所以没有/build/assets/raw)目录不存在,生产/部署就绪的 CSS、JS 和图像在@987654338 中找到@。
此解决方案的第一个问题是奇怪的src/assets/raw 目录,恕我直言,这看起来很丑陋。第二个问题是/vendor 目录。这意味着 php 引用了来自外部 src 的东西。因此,如果/src/index.php 负责处理它,它将包括../vendor/autoload.php。那么这意味着相同的代码被复制到/build/index.php。然后/build/ 不会通过将其放入/var/www/html 来运行,除非vendor 在/var/www 中,这看起来很奇怪。
我想到了很多其他的东西,但所有这些看起来都难看。为避免这个问题太长,我就到此为止。
请帮忙。我应该在composer.json 中使用vendor-dir 将vendor 放入/src/ 吗? (我知道,eww。)我应该使用什么样的目录结构?
【问题讨论】:
-
您应该从现有框架中汲取灵感,例如 Laravel 使用的结构与您正在做的非常接近:laravelbook.com/laravel-architecture BTW,如果可以的话,我建议您不要将 vendor 文件夹放在您的build 目录,然后在生产服务器中运行
composer install。 -
@Korri,谢谢,这有帮助。
-
同意@Korri 的评论。只要您提交您的 composer.lock 文件,
composer install在部署时应该不会花费很长时间。与您的问题没有直接关系,但我要更改的主要内容是将实际从 Web 服务器静态访问的内容与 @ 分开987654354@。这将保护您免受试图直接访问 php 文件的用户的影响,而这正是许多安全问题发生的地方。 Web 服务器将被配置为以文档根目录访问public目录。大多数框架都遵循这种设置方式。 -
我的应用程序根目录中通常有一个
boilerplate目录,其中包含开发资产,例如less、javascripts、bower.json、packages.json、fonts、@ 987654362@,然后我要么使用grunt或gulp处理它们并将它们发送到dist/目录。 -
将您的 index.php 放入一个文件夹中。 /public/index.php .. 我认为一个好的框架应该允许开发者选择最好的目录结构。例如在 Laravel 中,你可以对目录结构做任何你想做的事情。框架的行为不应该影响目录结构,它应该很容易定制。
标签: php composer-php gulp build-process