为CakePHP和依赖项使用Composer:总体策略、项目结构和“.gitignore”


Using Composer for CakePHP and dependencies: overall strategy, project structure and `.gitignore`

我希望我的CakePHP项目使用最佳实践。目前我们把PHP依赖项签入到项目的repo中,我不喜欢这样。

我希望项目利用Composer,但我不明白正确的策略。

首先,有官方CakePHP repo:
  • composer.json在项目根目录。
  • /vendors//plugins/,它们在.gitignore下面。
  • /app/Vendor//app/Plugin/不被忽略。
然后,有一个来自FriendsOfCake的app-template样板文件:
  • composer.json在项目根目录。
  • 没有/vendors//plugins/ .
  • /app/Vendor//app/Plugin/.gitignore下。

最后,还有cakephp-composer,一个活动项目。这意味着:

  • composer.json/app/ .
  • 插件本身应该手工安装到/app/Plugin/ .
  • 自述没有解释.gitignore策略,但插件作者说/app/Vendor//app/Plugin/应该被忽略。

cakephp-composer是最奇怪的东西。我应该如何获取CakePHP和CakePHP作曲家克隆我的项目后?

我想实现以下目标:

  1. 我的项目仓库只包含项目本身的源代码。任何在其他地方版本的代码,例如CakePHP框架和CakePHP插件,不应该出现在我的repo中。
  2. 克隆我的项目的repo到一个新的位置后,我想获取所有的PHP依赖,包括CakePHP和它的插件,与一个单一的Composer命令。无需手动下载/克隆。项目应该在Composer完成其工作后立即开始工作。
  3. 我真的很喜欢FriendsOfCake的应用模板样板。在我看来,它简单而合理。所以我希望我的项目结构尽可能接近app-template。

我不明白,请解释以下事情:

  1. Composer获取依赖项到配置中的文件夹在哪里?Composer文档提到了"PSR-4",而我(作为一个来自Ruby世界的前端开发人员)一点也不知道那是什么。
  2. .gitignore下面应该放什么文件夹?
  3. 我真的需要cakephp-composer吗?我希望我没有!
  4. 我如何配置composer.json获取插件与作曲家,特别是如果我不使用cakephp-composer?它可能就像在require下提到包名一样简单,但是我如何告诉Composer插件是否应该在app/Vendor/app/Plugin/下运行?哦,他们应该去哪里呢?
  5. 我如何正确地包括CakePHP和CakePHP插件获取的作曲家到我的项目?

对于Composer要获取的CakePHP插件,以haml为例。这是我需要我的前端工作,它有自己的Composer依赖。

好的,这里有几个问题…我试着回答几个。

首先,您应该清楚是否要使用CakePHP 2。或CakePHP 3.0。既然你说的是现有项目,我猜你指的是蛋糕2。X -它不是为了作曲家而建的。Cake 3.0是用composer构建的,所以如果升级到它是一个选择,我想它会更好(我自己还没用过3.0)

下面是一个简化的composer.json文件示例,来自我的一个项目:

{
    "name": "my-project",
    "require": {
        "cakedc/migrations": "2.2.2",
        "cakephp/debug_kit": "2.2.1",
    },
    "require-dev": {
        "phpunit/phpunit": "3.7.*"
    },
    "config": {
        "vendor-dir": "app/Vendor/"
    },
    "extra": {
       "installer-paths": {
         "app/Plugin/Migrations": ["cakedc/migrations"],
         "app/Plugin/DebugKit": ["cakephp/debug_kit"],
       }
     }
}
  1. "vendor-dir": "app/Vendor/"行-这是我配置composer将它的包,默认情况下,在我的app/Vendor/文件夹。

  2. .gitignore…

  3. 你不需要这个

  4. "installer-paths": { ?在这里,我配置了composer将特定的CakePHP插件放在Cake的插件目录中,而不是我在1.

  5. 中提到的默认的app/Vendor/
  6. CakePHP插件-见4。对于CakePHP本身,我还没有亲自做过。我确实尝试过一次,发现设置不能很好地与我的一个插件一起运行,所以我放弃了它。但是,您应该能够使用与上面相同的主体。

现在,回到2。你的礼物里应该有什么?任何内容完全由作曲家维护的内容-在我的情况下,是app/Vendor/app/Plugin/。假设这些文件夹的所有内容都由composer维护。如果你有。如果你手动添加了一个插件,那么你就不能忽略整个文件夹——你只能忽略与composer一起安装的特定插件。

PS -我个人删除根vendor/plugins/文件夹-我根本不使用它们。