PHP编写器:如何加载和使用位于供应商/外部的插件?

PHP编写器:如何加载和使用位于供应商/外部的插件?,php,symfony,composer-php,Php,Symfony,Composer Php,有没有办法让Composer运行位于./src/中的安装程序插件 假设有可能从一开始,我们就不清楚应该如何做 如果没有,文档似乎也建议可以在COMPOSER_HOME中安装插件,但基本上没有说明如何实现这一点——任何指针都是最受欢迎的 澄清一下:问题不在于自动加载类,而在于运行composer安装或composer更新时让composer加载插件 我的项目设置: ./app … ./src ./src/Hello ./src/Hello/HelloPlugin.php ./vendor … 插

有没有办法让Composer运行位于./src/中的安装程序插件

假设有可能从一开始,我们就不清楚应该如何做

如果没有,文档似乎也建议可以在COMPOSER_HOME中安装插件,但基本上没有说明如何实现这一点——任何指针都是最受欢迎的

澄清一下:问题不在于自动加载类,而在于运行composer安装或composer更新时让composer加载插件

我的项目设置:

./app
…
./src
./src/Hello
./src/Hello/HelloPlugin.php
./vendor
…
插件文件:

<?php # ./src/Hello/Hello.php
namespace Hello;

use Composer\Composer;
use Composer\IO\IOInterface;
use Composer\Plugin\PluginInterface;

class HelloPlugin implements PluginInterface
{
    public function activate(Composer $composer, IOInterface $io);
    {
        echo "Hello World!".PHP_EOL;
    }
} # END class
composer自动加载用于加载项目中所需的包的所有名称空间,而不是在composer安装或composer更新挂钩期间加载插件

加载您自己的插件类的唯一方法是实现您自己的composer插件,composer插件类型的普通包,composer将使用它加载您的HelloPlugin类。否则,在composer安装钩子期间将不会加载插件类

我自己构建了一个composer插件,你可以在这里找到它,以供参考


如果您有更多问题/或帮助,请随时提问。

您将psr-4和psr-0弄混了:@Jack:已修复并编辑了问题,但问题不是自动加载类…而是在运行composer安装或composer更新时让composer加载插件。我的理解是,你必须为你的插件创建一个单独的包,类型为:composer-plugin.Ya,它确实有效,我最终求助于它。我仍然好奇是否有可能,如果出现这样的情况,我不想或无法提供安装程序插件,因为它不是一个库。对此进行了更改,但在我运行composer安装或composer更新时仍然没有加载插件,我恐怕:-
{
    "name": "hello/world",
    "type": "project",
    "autoload": {
        "psr-0": {
            "Hello\\": "src/"
         }
    },
    "require": {
        "composer/installers": "~1.0",
        "composer-plugin-api": "~1.0"
    },
    "extra": {
        "class": ["Hello\\HelloPlugin"]
    }
}
"autoload": {
    "psr-0": {
        "Hello\\": "src/"
    }
}