使用Composer for CakePHP和依赖项:整体策略,项目结构和`.gitignore`

时间:2014-07-15 20:30:56

标签: php cakephp composer-php

我希望我的CakePHP项目能够使用最佳实践。目前我们已将PHP依赖项检入我们的项目回购中,我不喜欢这样。

我希望项目能够利用Composer,但我不了解正确的策略。

首先,有 official 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/的插件作者says

cakephp-composer是最奇怪的事情。克隆我的项目后,我该如何获取CakePHP和cakephp-composer?

我想实现以下目标:

  1. 我的项目仓库仅包含项目本身的源代码。任何在其他地方版本化的代码,例如: G。 CakePHP框架和CakePHP插件,不应该出现在我的仓库中。
  2. 在将我的项目的repo克隆到一个新位置后,我想用一个Composer命令获取所有PHP依赖项,包括CakePHP及其插件。没有手动下载/克隆。该项目应该在Composer完成其工作后立即开始工作。
  3. 我非常喜欢FriendsOfCake的app-template样板文件。这看起来简单而合理。所以我希望我的项目结构尽可能接近app-template。
  4. 我不理解并要求解释以下事项:

    1. Composer要将依赖项提取到已配置的文件夹在哪里?作曲家文档提及" PSR-4"而我(作为来自Ruby世界的前端开发者)并不知道那是什么。
    2. .gitignore下应放置哪些文件夹?
    3. 我真的需要cakephp-composer吗?我希望我不要!
    4. 如何配置composer.json以使用Composer获取插件,特别是如果我不使用cakephp-composer?它可能就像在require下提到包名一样简单,但我如何告诉Composer插件是否应该在app/Vendor/app/Plugin/之下?哦,他们应该去哪里?
    5. 如何正确地将Composer提取的CakePHP和CakePHP插件包含到我的项目中?
    6. 有关Composer提取的CakePHP插件示例,请执行haml。它是我需要的前端工作,它有自己的Composer依赖。

1 个答案:

答案 0 :(得分:4)

好的,那里有几个问题......我会尝试回答一些问题。

首先,你应该清楚你想要使用CakePHP 2.X或CakePHP 3.0。我假设你在谈论现有的项目,你的意思是Cake 2.X--它并没有考虑到作曲家。 Cake 3.0是在考虑到作曲家的情况下构建的,所以如果升级到那个是一个选项,我认为它会更好(我还没有使用过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/"行 - 我已配置编辑器,默认情况下,将其放在我的app/Vendor/文件夹中。<\ n / p>

  2. .gitignore的内容......我们会回过头来。

  3. 不,你不需要这个。

  4. 查看第"installer-paths": {行?我已经配置了编辑器将特定的CakePHP插件放在Cake的插件目录中,而不是我在1中提到的默认app/Vendor/

  5. 对于CakePHP插件 - 请参阅4.对于CakePHP本身,我个人没有完成它。我确实尝试了一下,发现设置与我的一个插件没有很好地配合,所以我放弃了它。但是,您应该能够使用与上述相同的原则。

  6. 现在,回到2.你的.gitignore应该是什么?任何内容都完全由作曲家维护 - 在我的例子中,app/Vendor/app/Plugin/。这假设这些文件夹的所有内容都由作曲家维护。如果你有例如。您手动添加的一个插件,然后您无法忽略整个文件夹 - 您只需要忽略与作曲家一起安装的特定插件。

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