我正在尝试制作兼容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。
答案 0 :(得分:2)
包装中的PSR4错误
floor9design\\machine-identifier\\": "src"
将导致composer / autoload_psr4.php映射到:
'floor9design\\machine-identifier\\' => array($vendorDir . '/floor9design/machine-identifier/src'),
哪个不是有效的类名称空间。
您应该更改PSR4以匹配您的类名称空间:
Floor9design\\MachineIdentifier\\": "src"
修复后,您可以在项目的任何位置正常使用它。