【发布时间】: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