【问题标题】:Composer plugin autoload depedencyComposer 插件自动加载依赖
【发布时间】:2017-05-06 03:31:13
【问题描述】:

所以我正在开发一个作曲家插件,它添加了一个可以在安装或更新后运行的自定义命令。

我了解自动加载配置,并且 composer 正在自动加载所有类,但它也缺少一个仅包含命名空间函数的文件。

在我的插件 composer.json 我有以下内容:

{
    "name": "myco/composer-s3-downloader",
    "type": "composer-plugin",
    "version": "0.1",
    "require": {
        "composer-plugin-api": "1.1.*",
        "aws/aws-sdk-php": "3.20.*"
    },
    "autoload": {
        "psr-4": {"MyCo\\Composer\\": "MyCo/"}
    },
    "extra": {
        "class": "MyCo\\Composer\\S3Downloader"
    }
}

我的插件类加载没有问题。我的依赖项的所有类也可以毫无问题地加载。所以我的插件命令代码使用 AWS 开发工具包就可以开始了。

当我尝试实例化 S3Client 时,问题就来了:

private function initClient() {
   if (is_null($this->_s3Client)) {
        $this->_s3Client = new \Aws\S3\S3Client([
            "version" => "latest",
            "region" => 'us-west-2',
            "credentials" => [
            "key" => $this->_creds['key'],
            "secret" => $this->_creds['secret'],
            ]]);
    }
}

我收到以下错误:

PHP 致命错误:调用未定义函数 Aws\manifest() 在 .../test/vendor/aws/aws-sdk-php/src/AwsClient.php 第 143 行

我可以在 AWS composer.json 中看到自动加载配置,这是正确的:

"autoload": {
    "psr-4": {
        "Aws\\": "src/"
    },
    "files": ["src/functions.php"]
}

Aws\manifest 函数在functions.php 中声明。然后在 vendor/composer/autoload_files.php 中指定 functions.php。但据我所知,该文件没有被加载。因此,并非我的所有依赖项实际上都可用。

我错过了哪些强制包含 autoload_files.php 的步骤?我没有为供应商文件夹中的任何内容做一个单独的包含。我假设作曲家会为我处理这个问题。但我想我错了。

【问题讨论】:

    标签: php composer-php


    【解决方案1】:

    所以在发布an issue at the Composer Github repo 之后,我确实了解到在作曲家执行期间运行的自动加载器只包含类。因此,如果您确实需要包含松散的功能,则必须手动运行完整的自动加载器。

    我在我的 Command 类中添加了以下方法,该方法由 composer 加载并在插件的 composer.json 的 extra 部分中定义。

    private function getIncludes() {
        $vendorDir = $this->composerInstance->getConfig()->get('vendor-dir');
        require $vendorDir . '/autoload.php';
    }
    

    我只是在我的插件构造函数中调用它,我需要的一切都变得可用。

    【讨论】:

      猜你喜欢
      • 2020-07-22
      • 2012-08-27
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2010-09-13
      • 1970-01-01
      • 2021-03-18
      相关资源
      最近更新 更多