正在 laravel 中加载作曲家 class

Loading a composer class in laravel

我正在尝试制作一个 laravel 兼容的 composer/packagist 包。我正在使用 Laravel 5.5.

我创建了一个包:floor9design/machine-identifier。 Composer 将它下载到 vendors/floor9design 很好,但是尽管 reading/googling 如何做到这一点,我不确定如何将它包含在我的 laravel 项目中。

PHP Storm 正在正确拾取 class,按预期自动完成。

到目前为止我还没有修改任何文件。如果我将以下内容添加到控制器:

use Floor9design\MachineIdentifier\MachineIdentifier;

(以及页面上的一些 class 用法)。

PHP storm 自动完成此操作(与其他 classes 有效调用一样)。

当我尝试加载它时,出现以下错误:

Class 'Floor9design\MachineIdentifier\MachineIdentifier' not found

我看了很多教程,很多信息似乎都缺少这最后一步。

我知道有三种方法:

首先: 直接 include_once,这在工作时不是正常的方法

其次: laravel 5.5 之前的方法(将 某些东西 添加到 app.php

第三 Laravel 5.5 进近,自动检测 某物

我故意说了 一些东西,因为文档似乎在谈论 ServiceProviders,但我根本不明白它们是如何工作的。

让我将其改写为一个问题和一个后续问题:

问题:除了 include_once,我如何从 Laravel.

中的 floor9design/machine-identifier 加载 MachineIdentifer class

问题 2:如果答案是通过服务提供商提供的,您能否简单解释一下它们之间的关系。

谢谢

答案(接受如下)

在 composer repo 上我错误地指定了 PSR4 命名空间,现在更正为:

    "autoload": {
    "psr-4": {
        "Floor9design\MachineIdentifier\": "src"
    }
}

之前的命名空间有一个 -,这是一个非法字符。非常感谢 lawrence-cherone。

你的PSR4在包裹里是错误的

floor9design\machine-identifier\": "src"

将导致 composer/autoload_psr4.php 映射到:

'floor9design\machine-identifier\' => array($vendorDir . '/floor9design/machine-identifier/src'),

这不是有效的 class 命名空间。

您应该更改 PSR4 以匹配您的 class 命名空间:

Floor9design\MachineIdentifier\": "src"

一旦你解决了这个问题,你就可以在项目的任何地方像往常一样使用它。