6

アプリ用の S3 プラグインを作成しています。app/Plugin/S3/Controller/Component/S3Component.php私はこれらを持っています:

<?php 

App::import('Vendor', 'aws/aws-autoloader');

use Aws\S3\S3Client;

class S3Component extends Component {

    public function loadS3 () {
        $s3 = S3Client::factory(array(
            'key' => '',
            'secret' => ''
        ));
        return $s3;
    }

}

私のアプリのコントローラーでは、次を使用して呼び出します$s3 = $this->S3->loadS3();

エラーがスローされますError: Class 'Aws\S3\S3Client' not found

App::uses('Vendor', 'aws/Aws/S3/S3Client');コンポーネントクラスに次の行を追加してみました:を削除しましuse Aws\S3\S3Client;た。それが示しているError: Class 'S3Client' not found

フォルダ内の AWS SDKapp/Plugin/S3/Vendor/aws

http://docs.aws.amazon.com/aws-sdk-php/guide/latest/quick-start.html#factory-methodを参照して S3 オブジェクトをロードしています。

解決:

これは、@akirk の助けを借りて、私のコンポーネントがどのように見えるかです。

<?php 

ini_set('include_path', ROOT . DS . 'lib' . PATH_SEPARATOR . ini_get('include_path'). PATH_SEPARATOR . ROOT .DS . 'app/Plugin/S3/Vendor/aws');

require ROOT . DS . 'app/Plugin/S3/Vendor/aws/aws-autoloader.php';

use Aws\S3\S3Client;

class S3Component extends Component {

    public function loadS3 () {
        $s3 = S3Client::factory(array(
            'key' => '',
            'secret' => ''
        ));
        return $s3;
    }

}
4

1 に答える 1

1

明らかに、自動インポートは機能しません。チュートリアルのように行う必要があります。require

require 'vendor/autoload.php';

オートローディングのメカニズムは CakePHP によって変更されるべきではないためです。

于 2014-04-01T06:36:49.557 に答える