因此,我正在使用添加可以在安装或更新后运行的自定义命令的作曲家插件。
我了解自动加载配置,而作曲家正在自动加载所有类,但它也缺少只包含名称置函数的文件。
在我的插件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 SDK,我的插件命令代码正常启动。
当我尝试实例化s3client时,问题来了:
private function initClient() {
if (is_null($this->_s3Client)) {
$this->_s3Client = new AwsS3S3Client([
"version" => "latest",
"region" => 'us-west-2',
"credentials" => [
"key" => $this->_creds['key'],
"secret" => $this->_creds['secret'],
]]);
}
}
我有以下错误:
php致命错误:致电未定义的功能AWS subest() 在.../test/vendor/aws/aws-sdk-php/src/awsclient.php上143
我可以在AWS Composer.json中看到自动加载config,这是正确的:
"autoload": {
"psr-4": {
"Aws\": "src/"
},
"files": ["src/functions.php"]
}
AWS 清单函数在functions.php中声明。然后在供应商/Composer/autoLoad_Files.php中指定functions.php。但是我可以知道该文件没有被加载。因此,并非我所有的依赖项实际上都可用。
我错过了什么步骤会迫使autoload_files.php的包含?我没有为供应商文件夹中的任何内容提供单曲。我假设作曲家会为我处理。但是我想我错了。
因此,在作曲家github repo上发布问题后,我确实知道在作曲家执行期间运行的自动加载器仅包括类。因此,如果您确实需要包含宽松的功能,则必须手动运行完整的自动加载器。
我在我的命令类中添加了以下方法,该方法由作曲家加载并在插件的extra
部分中定义。
private function getIncludes() {
$vendorDir = $this->composerInstance->getConfig()->get('vendor-dir');
require $vendorDir . '/autoload.php';
}
我只是在插件构造函数中称为它,我需要的一切都可以使用。