2015-06-23 124 views
7

您好我正在尝试在Laravel 5.1中开发一个软件包。感谢这里的帮助,我设置了基本知识。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); 

这给错误:加入这个依赖于主composer.json但

Class 'Google_Client' not found 

我可以避开这个问题不认为这是保持包开发无关的正确方法(如果有意义的话)

当我在L4.2中开发时,有一个工作台负责处理c ourse不再拥有在L5.1

任何帮助和最佳实践赞赏

回答

2

Because they are not part of the main autoload process

我想你误会了怎么作曲家依赖关系管理。当你在你的主要compose.json文件中列出一个依赖项时,composer会将它添加到主要的自动加载过程以及它们的所有依赖项以及它们依赖项的依赖关系等等。

您不必担心存储依赖项的位置或者Composer如何加载它们。作曲家会自动将它们添加到自动载入文件中,并且您只需确保您需要作曲家自动载入文件。一旦你需要作曲家自动加载文件,作曲家加载的所有类和函数都将可用。如果您需要composer autoload文件,您只需使用任何已安装软件包中的类,就可以确保使用适当的命名空间来解决它们。 Composer足够聪明,知道所有类的存储位置以及如何加载它们(这就是psr-0,psr-4,...的用途)。

所以,如果你正在开发一个Composer软件包,我们称之为'A',并且将软件包'C'列为软件包'A'的依赖项之一,作曲家会将它添加到自动加载文件中。如果你使用另一个软件包,比如说Laravel,它有一个依赖于你的软件包'A',那么'Laravel'中的软件包'C'也是可用的,因为它依赖于'A'。

I.e:如果这是你的作曲家。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时,它会为你添加该文件。

+0

这样做,现在有道理 - 谢谢 – Ray

+0

似乎需要包的作曲家autoload文件可以从服务提供商的启动方法完成。 – dannepanne

相关问题