你好,我正在尝试在 Laravel 5.1 中开发一个包。感谢这里的帮助,我已经设置了基础知识。
我当前的问题是如何在开发包时加载包的依赖项。
在包裹里composer.json
我添加了依赖项,并将它们安装在我的包开发文件夹中的供应商文件夹中。这不是框架根供应商文件夹。
这是我的包的 require 部分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 中不再有此功能
感谢任何帮助和最佳实践
因为它们不是主要自动加载过程的一部分
我认为您误解了作曲家依赖关系的管理方式。当您在主 compose.json 文件中列出依赖项时,Composer 会将其添加到主自动加载进程以及它们的所有依赖项以及它们的依赖项的依赖项,等等。
您不必担心依赖项存储在哪里或 Composer 将如何加载它们。 Composer 会自动将它们添加到自动加载文件中,并且您所要做的就是确保您需要作曲家自动加载文件。一旦您需要 Composer 自动加载文件,Composer 加载的所有类和函数都将可用。如果您需要 Composer 自动加载文件,那么要使用任何已安装包中的类,您所要做的就是确保使用正确的命名空间来寻址它们。 Composer 足够聪明,知道所有类的存储位置以及如何加载它们(这就是 psr-0、psr-4、... 的用途)。
因此,如果您正在开发一个 Composer 包,我们将其称为“A”,并将包“C”列为包“A”的依赖项之一,Composer 会将其添加到自动加载文件中。如果您使用另一个包,比如说 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 时,它会为你添加该文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)