使用 composer、gulp 和 Travis 的 PHP 网站的目录结构

2022-08-30 21:16:54

我试图找出php网站的目录结构。

该网站将使用:

  • 一个非常基本的php MVC框架(即MinimalMVC,但我正在寻找一个通用的解决方案,所以框架可能会被忽略)
  • 用于管理 PHP 依赖项的编辑器
  • 用于造型的 SCSS
  • gulp来编译SCSS(用于开发构建),还可以缩小和连接JS和CSS输出以及缩小图像等(仅用于部署构建)
  • Travis CI for CI stuff

因此,经过大量的思考和规划,并研究了我提出的不同类型目录结构的问题,我仍然找不到符合我标准的东西:

  • gulp deploy应该能够生成一个部署文件夹,当将其放入Apache服务器上的目录中时,应该只是工作TM/var/www/html/

    注意:MinimalMVC(以及CodeIgniter和其他类似的框架)要求他们的文件在根目录中,并且和文件夹在同一目录中index.phpappsys

  • 由于PHP从未真正由构建过程处理过,因此如果可以避免不必要的将文件复制到类似的东西中,那就太好了。基本上,PHP部分不会保持吞噬,我宁愿它不受吞噬的影响。src/**/*.phpbuild/**/*.php

现在,我的想法有点混乱,因为我一直在考虑这个问题,所以原谅我这个问题也有点混乱,但基本问题是,目录结构应该是什么样子?

一个想法:

.
|-- 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>

在此结构中,开发人员仅在目录中工作。SCSS 从 编译为 。这样,PHP 仍会从生成过程中移除。当尝试生成目录时,src文件夹被复制过来,(所以没有)目录不存在,生产/部署就绪的CSS,JS和图像可以在中找到。/src/src/assets/raw/scss/src/assets/cssdeploy/src/assets/raw//build/assets/raw/build/assets/

这个解决方案的第一个问题是奇怪的目录,恕我直言,这似乎很丑陋。第二个问题是目录。这意味着php引用了来自外部src的东西。因此,如果要照顾它,它将包括.然后,这意味着相同的代码被复制到 .然后不会通过将其放入运行,除非看起来很奇怪。src/assets/raw/vendor/src/index.php../vendor/autoload.php/build/index.php/build//var/www/htmlvendor/var/www

我还想到了很多其他的东西,但所有这些东西都以某种方式看起来很丑陋。为了避免这个问题太长,我就到此为止。

请帮忙。我应该在?(我知道,嗯。我应该使用哪种目录结构?vendor/src/vendor-dircomposer.json


答案 1

我同意上面Korri的评论,因为您可以从现有框架中获得灵感中受益。

就我个人而言,这种目录结构对我来说是正确的。

.
|-- composer.json
|-- gulpfile.js
|-- package.json
|-- changelog.md
|-- readme.md
|-- /src (This is the API code that *I'm* responsible for, and that I *own*.).
|   |-- /app
|   |   |-- /controllers
|   |   |-- /models
|   |   `-- <other_framework_stuff>
|   /public (Keeping this outside of the src dir, means that you can give this to your front-end devs without needing to have the entire codebase).
|   |   |-- /styles
|   |   |-- /images
|   |   |-- /js
|   /config (Put all configuration files outside of the src scope, so you can keep it outside of source control)
|   /build (CI build related configuration)
|   |   |--phpcs.xml
|   |   |--phpdocx.xml
|-- /tests (separating out your tests in this way can help you run tests separately, more easily)
|   |   |--acceptance
|   |   |--integration
|   |   |--unit
|-- /vendor (Depenedencies installed via Composer)

真的,你的问题没有社区驱动的正确答案。正确答案特定于您的业务工作的团队以及项目本身。

我永远不会把目录放在你的目录中 - 因为你不拥有它。你不负责项目依赖项中对代码的更改,因此它应该留在项目墙之外的自己的范围内。/vendor/src

使用PSR-4自动加载,您的目录结构实际上并不重要,可以随时轻松更改,而不会影响您的代码。所以,尝试一下,看看什么感觉适合你。


答案 2

推荐