【问题标题】:Composer autoload not working for package with custom installer-paths setComposer 自动加载不适用于设置了自定义安装程序路径的包
【发布时间】: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


    【解决方案1】:

    我忽略了一些东西,结果证明这不是作曲家的问题。供应商目录的路径在我的本地磁盘上与 docker 容器内的路径不同。

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 1970-01-01
      • 2012-11-03
      • 2015-05-07
      • 2017-01-26
      • 2014-05-24
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      相关资源
      最近更新 更多