使用composer、gulp和Travis的PHP网站的目录结构
我试图找出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 MVC框架(即,但我正在寻找一个通用的解决方案,因此该框架可能会被忽略)
- 用于管理PHP依赖项的composer
- 样式化SCS
- gulp编译SCS(用于开发构建),并缩小和连接JS和CSS输出以及缩小图像等(仅用于部署构建)
- 对于CI内容
应该能够生成一个部署文件夹,当将其放入Apache服务器上的gulp deploy
目录中时,它应该可以正常工作 注意:minimamvc(以及CodeIgniter和其他类似框架)需要根目录中的/var/www/html/
文件,同一目录中有index.php
和app
文件夹sys
- 由于PHP从未真正被构建过程处理过,因此如果可以避免不必要地将
文件复制到src/***/.PHP
之类的文件中,那就太好了。基本上,PHP部分不保留gulp,我更希望它不受gulp的影响build/***.PHP
。
|--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文件的用户的攻击,而这正是