正在 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"
一旦你解决了这个问题,你就可以在项目的任何地方像往常一样使用它。
我正在尝试制作一个 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"
一旦你解决了这个问题,你就可以在项目的任何地方像往常一样使用它。