在 laravel 中加载作曲家类
Posted
技术标签:
【中文标题】在 laravel 中加载作曲家类【英文标题】:Loading a composer class in laravel 【发布时间】:2018-06-27 16:13:17 【问题描述】:我正在尝试制作与 laravel 兼容的 composer/packagist 包。我正在使用 Laravel 5.5。
我创建了一个包:floor9design/machine-identifier
。 Composer 将此下载到 vendors/floor9design
很好,但尽管阅读/谷歌搜索如何执行此操作,但我不确定如何将其包含在我的 laravel 项目中。
php Storm 正在正确选择课程,并按预期自动完成。
到目前为止,我还没有修改任何文件。如果我将以下内容添加到控制器:
use Floor9design\MachineIdentifier\MachineIdentifier;
(以及页面上的一些类用法)。
PHP Storm 会自动完成这一点(就像其他有效调用的类一样)。
当我尝试加载时,出现以下错误:
Class 'Floor9design\MachineIdentifier\MachineIdentifier' not found
我浏览了很多教程,但很多信息似乎都缺少这最后一步。
我意识到有三种方法:
首先:
直接include_once
,在工作时,不是正常的做法
其次:
Laravel 5.5 之前的方法(将 something 添加到 app.php
)
第三 Laravel 5.5 及更高版本,something 的自动检测。
我故意说一些东西,因为文档似乎在谈论ServiceProviders
,我只是不明白它们是如何工作的。
让我将其改写为一个问题和一个后续问题:
问题:除了include_once
,我如何在 Laravel 中从floor9design/machine-identifier
加载 MachineIdentifer 类。
问题 2:如果答案是通过服务提供商提供的,您能否简单解释一下它们之间的关系。
谢谢
答案(如下所示)
在作曲家 repo 中,我错误地指定了 PSR4 命名空间,现在已更正为:
"autoload":
"psr-4":
"Floor9design\\MachineIdentifier\\": "src"
之前的命名空间有一个-
,这是一个非法字符。非常感谢 lawrence-cherone。
【问题讨论】:
感谢您的接受 :),您可能有兴趣从此类中删除一些方法,以涵盖所有系统信息:github.com/plinker-rpc/system/blob/master/src/System.php 非常感谢,很高兴知道这一点。我会审查这些。 【参考方案1】:你的 PSR4 包装错了
floor9design\\machine-identifier\\": "src"
将导致 composer/autoload_psr4.php 映射到:
'floor9design\\machine-identifier\\' => array($vendorDir . '/floor9design/machine-identifier/src'),
这不是一个有效的类命名空间。
您应该更改 PSR4 以匹配您的类命名空间:
Floor9design\\MachineIdentifier\\": "src"
一旦你解决了这个问题,你就可以在项目的任何地方像往常一样使用它。
【讨论】:
以上是关于在 laravel 中加载作曲家类的主要内容,如果未能解决你的问题,请参考以下文章
Composer 更新 - 无法在 http://packagist.org 中加载软件包 shopware/shopware:
无法在 Xampp /lampp (MAC) 中加载 laravel 项目