我目前的问题是如何在我开发它时加载包的依赖项.
在包composer.json中,我添加了依赖项,并将它们安装在我的包开发文件夹中的vendor文件夹中.这不是框架根供应商文件夹.
这是包composer.json的my require部分:
"require": { "illuminate/support": "~5.1","PHP" : ">=5.3.0","google/apiclient": "dev-master" },
因为它们不是主要自动加载过程的一部分,所以确保我的包的依赖项从开发文件夹中正确加载的最佳方法是什么?如何加入自动加载?我担心如果我将它们引用到当前位置/命名空间,它将在以后作为包安装在另一个应用程序中时中断.
$client = new \Google_Client($config);
这给出了错误:
Class 'Google_Client' not found
我可以通过将这个依赖项添加到主composer.json来解决这个问题,但是不要认为这是保持包开发独立的正确方法(如果这是有道理的)
当我在L4.2中开发时,有一个工作台负责装载,当然L5.1中不再具有这些功能
任何帮助和最佳实践赞赏
Because they are not part of the main autoload process
我认为你误解了作曲家依赖关系是如何被管理的.当你在main compose.json文件中列出一个依赖项时,composer会将它添加到主自动加载进程以及它们的所有依赖项,以及它们的依赖项的依赖关系,等等递归.
您不必担心存储依赖项的位置或Composer将如何加载它们. Composer会自动将它们添加到自动加载文件中,您所要做的就是确保需要composer autoload文件.一旦您需要composer autoload文件,composer加载的所有类和函数都将可用.如果您需要composer autoload文件,您只需要使用任何已安装的包中的类来确保使用正确的命名空间来解决它们. Composer足够聪明,可以知道所有类的存储位置以及如何加载它们(这就是psr-0,psr-4,…).
因此,如果您正在开发Composer包,请将其称为“A”,并将包“C”列为包“A”的依赖项之一,编辑将为您将其添加到自动加载文件中.如果你使用另一个包,比如Laravel,它依赖于你打包’A’,那么包’C’将在Laravel中可用,因为它是’A’的依赖.
即:如果这是你的composer.json文件
{ "name": "foo/bar","require": { "google/apiclient": "1.0.*" } }
这段代码可行
require_once __DIR__ . '/vendor/autoload.PHP'; $client = new Google_Client(); $youtube = new Google_Service_YouTube($client);