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

使用composer、gulp和Travis的PHP网站的目录结构,php,composer-php,gulp,build-process,Php,Composer Php,Gulp,Build Process,我试图找出php网站的目录结构 该网站将使用: 一个非常基本的php MVC框架(即,但我正在寻找一个通用的解决方案,因此该框架可能会被忽略) 用于管理PHP依赖项的composer 样式化SCS gulp编译SCS(用于开发构建),并缩小和连接JS和CSS输出以及缩小图像等(仅用于部署构建) 对于CI内容 因此,在经过大量思考、规划和研究我提出的不同类型目录结构的问题后,我仍然无法找到符合我标准的内容: gulp deploy应该能够生成一个部署文件夹,当将其放入Apache服务器上的/

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

该网站将使用:

  • 一个非常基本的php MVC框架(即,但我正在寻找一个通用的解决方案,因此该框架可能会被忽略)
  • 用于管理PHP依赖项的composer
  • 样式化SCS
  • gulp编译SCS(用于开发构建),并缩小和连接JS和CSS输出以及缩小图像等(仅用于部署构建)
  • 对于CI内容
因此,在经过大量思考、规划和研究我提出的不同类型目录结构的问题后,我仍然无法找到符合我标准的内容:

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

    注意:minimamvc(以及CodeIgniter和其他类似框架)需要根目录中的
    index.php
    文件,同一目录中有
    app
    sys
    文件夹

  • 由于PHP从未真正被构建过程处理过,因此如果可以避免不必要地将
    src/***/.PHP
    文件复制到
    build/***.PHP
    之类的文件中,那就太好了。基本上,PHP部分不保留gulp,我更希望它不受gulp的影响

现在,我的想法有点混乱,因为我已经想得太多了,所以请原谅我这个问题也有点混乱,但基本问题是,目录结构应该是什么样子的

一个想法:

。
|--composer.json
|--gulpfile.js
|--package.json
|--src
||--app
|| |--控制器
|| |——模型
|   |   `-- 
||——资产
|| |--css
|| |--img
|| |--js
||`--生的
||`--scss
||--index.php
|`--sys
|       `-- 
|--试验
`--卖主
`-- 
在此结构中,开发人员仅在
/src
目录中工作。SCS从
/src/assets/raw/SCSS/
编译为
src/assets/css
。这样,PHP就可以从构建过程中移除。尝试生成
deploy
目录时,会复制src文件夹,
/src/assets/raw/
(因此不存在
/build/assets/raw
)目录,并且在
/build/assets/
中可以找到生产/部署就绪的CSS、JS和图像

这个解决方案的第一个问题是奇怪的
src/assets/raw
目录,它看起来很丑。第二个问题是
/vendor
目录。这意味着php引用了src之外的内容。因此,如果
/src/index.php
正在处理它,它将包括
。/vendor/autoload.php
。那就意味着相同的代码被复制到
/build/index.php
中。然后,
/build/
将不会通过将其放到
/var/www/html
中来运行,除非
供应商
/var/www
中,这看起来很奇怪

我还想到了很多其他的东西,但从某种程度上看,这些东西都很难看。为了避免这个问题太长,我就到此为止


请帮忙。我是否应该使用
composer.json中的
vendor dir
vendor
放入
/src/
?(我知道,eww。)我应该使用什么样的目录结构?

我同意上面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)
。
|--composer.json
|--gulpfile.js
|--package.json
|--changelog.md
|--自述文件
|--/src(这是由*我*负责、我*拥有*的API代码)。
||--/app
|| |--/控制器
|| |--/型号
|   |   `-- 
|/public(将其保留在src dir之外,意味着您可以将其提供给前端开发人员,而无需拥有整个代码库)。
|| |--/styles
|| |--/图像
|| |--/js
|/config(将所有配置文件放在src范围之外,这样您就可以将其放在源代码管理之外)
|/build(与CI生成相关的配置)
|| |--phpcs.xml
|| |--phpdocx.xml
|--/tests(以这种方式分离测试可以帮助您更轻松地单独运行测试)
|| |——接受
|| |——整合
|| |——单位
|--/vendor(通过Composer安装的依赖项)
真的,你的问题没有社区驱动的正确答案。正确答案是针对您的业务、您所在的团队以及项目本身的

我从未将
/vendor
目录放在您的
/src
目录中,因为您不拥有它。您不负责对项目依赖项中的代码进行更改,因此应该将其保留在项目墙之外的自己的范围内


通过自动加载,您的目录结构实际上并不重要,它可以在任何时候轻松更改,而不会对代码产生影响。所以,尝试一下,看看什么对你合适。

你应该从现有的框架中汲取灵感,例如,Laravel使用的结构与你正在做的非常接近:顺便说一句,如果可以的话,我建议不要将供应商文件夹放在构建目录中,而是在生产服务器中运行
composer install
。@Korri,谢谢,这很有帮助。同意@Korri的评论。只要提交composer.lock文件,
composer安装
在部署时就不会花费太长时间。这与您的问题没有直接关系,但我要更改的主要内容是将从web服务器静态访问的内容与
src
分开。这将保护您不受试图直接访问php文件的用户的攻击,而这正是