私は、インストールまたはアップデート後に実行できるカスタムコマンドを追加するコンポーザープラグインに取り組んでいます。作者プラグイン自動暴行
私はオートローディングの設定を理解しています。コンポーザーはすべてのクラスをオートロードしていますが、名前空間付きの関数だけを含んでいるファイルもありません。私のプラグイン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を使ってうまく始まります。
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 Fatal error: Call to undefined function Aws\manifest() in .../test/vendor/aws/aws-sdk-php/src/AwsClient.php on line 143
私はAWSのcomposer.jsonに自動ロード設定を見ることができますが、私はS3Clientをインスタンス化しようとすると、
の問題は、ここに来て正しいです:
"autoload": {
"psr-4": {
"Aws\\": "src/"
},
"files": ["src/functions.php"]
}
Aws \ manifest関数はfunctions.phpで宣言されています。そしてfunctions/phpはvendor/composer/autoload_files.phpで指定されます。しかし、私はファイルが読み込まれていないことを伝えることができます。だから私の依存関係のすべてが実際に利用できるわけではありません。
私の欠点は何ですか?autoload_files.phpが含まれていますか?私は、ベンダーのフォルダ内の何にもインクルードすることは一切していません。私は作曲家がそれを私のために処理すると仮定しています。しかし、私は間違っていると思う。