Ray*_*Ray 7 php laravel composer-php
嗨,我正在尝试在Laravel 5.1中开发一个包.感谢这里的帮助,我已经设置了基础知识.
我目前的问题是如何在我开发它时加载包的依赖项.
在包中,composer.json我添加了依赖项,并将它们安装在我的包开发文件夹中的vendor文件夹中.这不是框架根供应商文件夹.
这是我的包的需求部分composer.json:
"require": {
"illuminate/support": "~5.1",
"php" : ">=5.3.0",
"google/apiclient": "dev-master"
},
Run Code Online (Sandbox Code Playgroud)
因为它们不是主要自动加载过程的一部分,所以确保从开发文件夹中正确加载我的包的依赖项的最佳方法是什么?如何加入自动加载?我担心如果我将它们引用到它们当前的位置/命名空间,它将在以后作为另一个应用程序中的包安装时中断.
在我的代码中我有以下内容:
$client = new \Google_Client($config);
Run Code Online (Sandbox Code Playgroud)
这给出了错误:
Class 'Google_Client' not found
Run Code Online (Sandbox Code Playgroud)
我可以通过将这个依赖项添加到主composer.json来解决这个问题,但是不认为这是保持包开发独立的正确方法(如果这是有道理的)
当我在L4.2中开发时,有一个工作台负责装载,当然L5.1中不再具有这些功能
任何帮助和最佳实践赞赏
因为它们不是主要自动加载过程的一部分
我认为您误解了如何管理作曲家依赖项。当您在主 compose.json 文件中列出一个依赖项时,Composer 会将其添加到主自动加载进程以及它们的所有依赖项、以及它们的依赖项的依赖项,等等。
您不必担心依赖项存储在哪里或 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.*"
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码将起作用
require_once __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
$youtube = new Google_Service_YouTube($client);
Run Code Online (Sandbox Code Playgroud)
注意我需要作曲家自动加载文件,这似乎是您的问题。当你使用 Laravel 时,它会为你添加该文件。
| 归档时间: |
|
| 查看次数: |
1733 次 |
| 最近记录: |