在 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 项目

Laravel 在模态窗口中加载外部 URL

如何在 Laravel 中加载嵌套关系

使用 Composer 在 Laravel 4 中加载 css/js 文件?

CSS 不会在 XAMPP 上的 Laravel 8 + Jetstream 中加载