'Aws\S3\S3Client' not foundの呪縛から解放するには...
ある案件で、すでにCakePHPで作られた管理画面があった。
(※この案件でCakePHPを初めて使うことになる)
そこに画像をアップロードする機能があったんだけど、プロジェクトが大きくなるにつれてAWSに以降することになった。
そのため、画像アップロードの向き先をローカルではなく、S3に以降しようと話がまとまった。
そんなときに起きたあるある話をまとめますた。
環境
・ CakePHP v2.5.4
・ AWS SDK for PHP v2.8
・ composer/installers v~1.0
途中から知るComposerについて
最初にやったことは、AWS SDK for PHP(aws-sdk-php)をAWS公式からダウンロード。
CakePHPの場合、GITで管理されているプラグインに関しては、cakephp/app/Plugin直下で管理し、ライブラリ/モジュールなどcakephp/app/Vendorで管理されることが作業中わかったので、ダウンロードしたaws-sdk-phpのzipをVendorの中で解答(zipファイルは消す)。
そして参考記事で紹介されている内容をもとにaws-sdk-phpの中に入っているS3Clientを使うと...
2017-04-24 20:12:18 Error: Fatal Error (1): Class 'Aws\S3\S3Client' not found in [/opt/www/cakephp/app/Plugin/AmazonWebServices/Model/Datasource/S3.php, line 24]
とエラーが出て、
use Aws\S3\S3Client;
ここの呼び出しがちゃんと処理されていないらしい。
参考記事
CakePHPのDatasourceを使ってAWS S3にファイルをアップロードする
CakePHP2.3でAWS SDK2 for PHPを使ってS3にファイルをアップロードする方法
'Aws\S3\S3Client' not foundの対策
手動でaws-sdk-phpを入れたが、Composerで導入する。
AWS SDK for PHPをインストールするならComposerでしょ!の記事の内容を見て、
AWSの公式ドキュメントとCakePHPの公式ドキュメントを確認。
Composerについて
元々、FuelPHPでComposerを使っていたこととaws-sdk-phpをComposerから導入したので、フレームワークは違うがすでにComposerでaws-sdk-phpを入れていたFuelPHPのプロジェクトを見ながら作業を再開。
次に詰まったのは、Composerで入れても***'Aws\S3\S3Client' not foundが起きてしまう。
再度、ドキュメントを確認していくとComposerで入れた時に自動的に生成された、autoload.phpを読み込みが必要だが、それまでのCakePHPのプロジェクトでは、そもそもautoload.php***がなかったため、インポート処理もなかった。
autoload.phpを読み込み
ドキュメントを確認すると
bootstrap.phpに
require APP . 'Vendor/autoload.php';
を追加することがわかった。
Vendorにもcomposerを入れる
また、composer.jsonのrequire内に
"composer/installers": "~1.0"
を追加する。
これは、autoload.phpが使うようだ。
composer/installersがないと、また違うエラーが出てしまう。
結果
これらの設定で、'Aws\S3\S3Client' not foundの呪縛から解放された。
他にこれらが書かれている記事がなかったのと、社内共有のためにまとめました。
お役にたたてもらえばと存じまする〜。