PHP Composer:如何加载和使用位于vendor /?之外的插件?

时间:2014-02-13 07:29:47

标签: php symfony composer-php

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

relevant docs对于如何做到这一点并不清楚,假设可以开始。

如果没有,文档似乎也暗示可以在COMPOSER_HOME中安装一个插件,但基本上没有说明如何这样做 - 任何指针都是最受欢迎的。

只是为了澄清:问题不在于自动加载类,而是在运行composer installcomposer update时让作曲家加载插件。

我的项目设置:

./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.json文件的相关行:

{
    "name": "hello/world",
    "type": "project",
    "autoload": {
        "psr-0": {
            "Hello\\": "src/"
         }
    },
    "require": {
        "composer/installers": "~1.0",
        "composer-plugin-api": "~1.0"
    },
    "extra": {
        "class": ["Hello\\HelloPlugin"]
    }
}

2 个答案:

答案 0 :(得分:1)

作曲家autoload用于加载您项目中namespaces的所有require个包,而不是在composer install或{{{}期间加载插件1}}挂钩。

加载自己的插件类的唯一方法是实现自己的composer插件,这是composer update类型的普通包,作者将使用它来加载composer-plugin类。否则,在HelloPlugin挂钩期间不会加载您的插件类。

我自己构建了一个composer install,您可以在这里找到它https://github.com/mnsami/composer-custom-directory-installer,以供参考。

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

答案 1 :(得分:-1)

"autoload": {
    "psr-0": {
        "Hello\\": "src/"
    }
}

https://getcomposer.org/doc/01-basic-usage.md#autoloading