在laravel

时间:2018-01-18 14:41:31

标签: php laravel composer-php packagist

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

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

PHP Storm正在提升课程,按预期自动完成。

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

use Floor9design\MachineIdentifier\MachineIdentifier;

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

PHP风暴自动完成此功能(与其他有效调用的类一样)。

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

Class 'Floor9design\MachineIdentifier\MachineIdentifier' not found

我已经浏览了大量的教程,而且很多信息似乎都缺少了最后一步。

我意识到有三种方法:

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

其次: Pre-laravel 5.5方法(将某些添加到app.php

第三 Laravel 5.5方法及以上,某事的自动检测。

我故意说某些,因为文档似乎谈到了ServiceProviders,而我根本就没有了解它们是如何工作的。

让我把它改成问题和后续问题:

问题:除了include_once之外,如何从Laravel中的floor9design/machine-identifier加载MachineIdentifer类。

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

由于

答案(如下所述)

在作曲家回购中,我错误地指定了PSR4名称空间,现在更正为:

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

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

1 个答案:

答案 0 :(得分:2)

包装中的PSR4错误

floor9design\\machine-identifier\\": "src"

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

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

哪个不是有效的类名称空间。

您应该更改PSR4以匹配您的类名称空间:

Floor9design\\MachineIdentifier\\": "src"

修复后,您可以在项目的任何位置正常使用它。