您好我正在尝试在Laravel 5.1中开发一个包。感谢这里的帮助,我已经设置了基础知识。
我当前的问题是如何在开发时加载包的依赖项。
在包composer.json
中,我添加了依赖项,并将这些依赖项安装在我的软件包开发文件夹中的供应商文件夹中。这不是框架根供应商文件夹。
这是包composer.json
的
"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中的特色。
任何帮助和最佳实践表示赞赏
答案 0 :(得分:2)
因为它们不是主要自动加载过程的一部分
我认为您误解了如何管理作曲家依赖关系。在你的main compose.json文件中列出一个依赖项时,composer会将它添加到主自动加载进程及其所有依赖项,以及它们的依赖项的依赖项,等等递归。
您不必担心存储依赖项的位置或Composer将如何加载它们。 Composer会自动将它们添加到自动加载文件中,您需要做的就是确保您需要编辑器自动加载文件。一旦您需要composer autoload文件,composer加载的所有类和函数都将可用。如果您需要composer autoload文件,您只需要使用任何已安装的包中的类来确保使用正确的命名空间来解决它们。 Composer非常聪明,可以知道所有类的存储位置以及如何加载它们(这就是psr-0,psr-4,...)。
因此,如果您正在开发一个Composer软件包,请拨打电话' A',然后列出软件包' C'作为您的软件包的依赖项之一,作曲家会将它添加到自动加载文件中。如果你使用另一个包,那就说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);
注意我需要编辑器自动加载文件,这似乎是你的问题。当您使用Laravel时,它将为您添加该文件。