如何在CakePHP 2 Travis集成中自动加载Composer包


How to autoload Composer packages in CakePHP 2 Travis integration

我正在开发一个CakePHP 2.x插件,该插件使用Composer来引入包依赖关系。我现在正试图使用蛋糕之友的Travis包,在插件的存储库更新时自动运行我的单元测试。

据我所知,这还不包括在我的供应商文件中加载所需的Composer自动加载文件。结果,我的测试失败了,因为第三方包中定义的类丢失了。

正如CakePHP 2的高级安装中所描述的,我试图将以下内容添加到bootstrap.php:-

require APP . 'Vendor' . DS . 'autoload.php';

我试图通过.travis.yml文件的before_script来附加bootstrap.php:-

before_script:
  - git clone https://github.com/FriendsOfCake/travis.git --depth 1 ../travis
  - ../travis/before_script.sh
  - echo "require APP . 'Vendor' . DS . 'autoload.php';" >> ../cakephp/app/Config/bootstrap.php

不幸的是,由于找不到文件APP . 'Vendor' . DS . 'autoload.php',因此此操作失败。(我也尝试过在APP . '..' . DS . 'Vendor' . DS . 'autoload.php'中查找该文件)。

使用Travis安装CakePHP时,Composer autoload.php文件位于何处?当我的测试在Travis CI上远程运行时,我如何确保我的第三方包被加载?

第三方插件的默认目录名为vendor(小写),CakePHP有Vendor,您可以在.../app/composer.json 中更改

{
   "config": {
      "vendor-dir": "Vendor" // CakePHP third party plugins dir name
   },
   "require": {
      ...
   }
}

解决方案是将require语句中的Vendor文件夹更改为before_script:-中的小写vendor

before_script:
  - git clone https://github.com/FriendsOfCake/travis.git --depth 1 ../travis
  - ../travis/before_script.sh
  - echo "require APP . 'vendor' . DS . 'autoload.php';" >> ../cakephp/app/Config/bootstrap.php

完成此操作后,CakePHP正确地包含Composer自动加载文件。