【发布时间】:2022-06-23 17:50:18
【问题描述】:
主要项目
我有一个使用这个主 composer.json 的项目设置,需要一个自定义插件到自定义安装路径:
{
"name": "myself/main-project",
"repositories": [
{
"type": "git",
"url": "https://github.com/myself/some-plugin.git"
}
],
"require": {
"myself/some-plugin": "@dev",
},
"extra": {
"installer-paths": {
"some-other-path/{$name}/": ["type:wordpress-plugin"]
}
}
}
插件
该插件有一个单独的 repo,并且有一个类似这样的 composer.json,带有自动加载命名空间 Foo:
{
"name": "myself/some-plugin",
"type": "wordpress-plugin",
"autoload": {
"psr-4": {
"Foo\\": "src"
}
},
"require": {
"composer/installers": "^2.1"
}
}
插件在src/Bar.php 中有一个命名空间类Bar:
<?php
namespace Foo;
class Bar {
public function __construct() {
echo 'Foobar!';
}
}
问题
当插件安装在自定义路径中时,自动加载似乎不起作用。在程序的其他地方我尝试调用类Bar:
<?php
require_once(dirname(__DIR__) . '/vendor/autoload.php');
$bar = new Foo\Bar();
这给了我错误Fatal error: Uncaught Error: Class "Foo\Bar" not found。
但如果我将主 composer.json 中的自定义安装程序路径更改为普通的 vendor 文件夹并重新安装:
"installer-paths": {
"vendor/{$name}/": ["type:wordpress-plugin"]
}
...一切都按预期进行,我从课堂上得到了Foobar!。
我尝试过的
- 检查自动加载器是否在生成的文件中的
Foo命名空间上拾取,它会。 - 使用composer's path (
"type": "path") 在本地加载插件,同样的问题。 - 尝试从
\Foo\Bar和所有其他组合加载。
为什么设置自定义安装程序路径时自动加载行为异常?
【问题讨论】:
标签: php composer-php autoload psr-4