PHP Composer:如何加载和使用位于供应商之外的插件/



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

相关文档对于应该如何完成它相当不清楚,假设它可以开始。

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

澄清一下:问题不在于自动加载类,而在于使作曲家在运行composer installcomposer update时加载插件。

我的项目设置:

./app
…
./src
./src/Hello
./src/Hello/HelloPlugin.php
./vendor
…

插件文件:

<?php # ./src/Hello/Hello.php
namespace Hello;
use ComposerComposer;
use ComposerIOIOInterface;
use ComposerPluginPluginInterface;
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"]
    }
}

作曲家autoload用于加载您在项目中require的所有包namespaces,它不打算在composer installcomposer update钩子期间加载插件。

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新