【问题标题】:Laravel 5.1 Package Development - loading packages dependencies in developmentLaravel 5.1 包开发——开发中加载包依赖
【发布时间】:2015-09-08 21:31:49
【问题描述】:

您好,我正在尝试在 Laravel 5.1 中开发一个包。感谢这里的帮助,我已经建立了基础。

我目前的问题是如何在开发包的时候加载依赖包。

在包composer.json 中,我添加了依赖项,现在将它们安装在我的包开发文件夹中的供应商文件夹中。这不是框架根供应商文件夹。

这是我的包composer.json的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 中当然不再具有

感谢任何帮助和最佳实践

【问题讨论】:

    标签: php laravel composer-php


    【解决方案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 时,它会为您添加该文件。

    【讨论】:

    • 似乎要求包的composer自动加载文件可以从服务提供者的引导方法中完成。
    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多