Как работать с aws-sdk-php в проекте zf2?

На самом деле я знаю, что есть модуль aws-sdk-php для ZF2, который называется aws-sdk-php-zf2, но у меня есть часть, использующая простой sdk, и я хотел бы работать с ним внутри моих контроллеров zf2, не имея двух SDK; один для простого PHP, а другой для сценариев ZF2. Есть ли способ заставить его работать?

Вот как я работаю с aws-sdk в простом PHP-скрипте:

require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
// Instantiate an S3 client
$client = S3Client::factory(array(
    'credentials' => array(
        'key'    => 'key',
        'secret' => 'secret_key',
    )
));
$bucket = 'bucket_name';
$keyname = 'project_name/file.ext';

$result = $client->deleteObject(array(
    'Bucket' => $bucket,
    'Key'    => $keyname
)); 
print_r($result);

Как я мог этого добиться?


person user3911183    schedule 17.04.2015    source источник
comment
Вам нужно будет загрузить его как внешнюю библиотеку в свой проект zf2, см. этот сообщение   -  person blackbishop    schedule 17.04.2015
comment
Спасибо, тоже помогает.   -  person user3911183    schedule 21.04.2015


Ответы (1)


После установки через Composer:

1) Поместите его в файл public/init_autoloader.php, чтобы установить библиотеку, доступную во всем приложении, это мое:

// Composer autoloading
if (file_exists('vendor/autoload.php')) {
    $loader = include 'vendor/autoload.php';
}

$zf2Path = false;

if (is_dir('vendor/ZF2/library')) {
    $zf2Path = 'vendor/ZF2/library';
} elseif (getenv('ZF2_PATH')) { //Support for ZF2_PATH environment variable or git submodule
    $zf2Path = getenv('ZF2_PATH');
} elseif (get_cfg_var('zf2_path')) { //Support for zf2_path directive value
    $zf2Path = get_cfg_var('zf2_path');
}

if ($zf2Path) {
    if (isset($loader)) {
        $loader->add('Zend', $zf2Path);
    } else {
        include $zf2Path . '/Zend/Loader/AutoloaderFactory.php';
        Zend\Loader\AutoloaderFactory::factory(array(
            'Zend\Loader\StandardAutoloader' => array(
                'autoregister_zf' => true
            )
        ));
    }
}

2) Используйте его в контроллере по своему усмотрению, в моем случае это частная функция внутри контроллера:

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception as S3Exception;
...
private function s3UploadFile($id, $invalidation=false, $file = null, $content = null){
   $response = '';
   //check if the file already exists in S3, if not then build it
   try {
       $s3Client = S3Client::factory(array(
                   'key' => $this->config['aws']['key'],
                   'secret' => $this->config['aws']['secret'],
                   'region' => $this->config['aws']['region']
       ));

       if (!$s3Client->doesObjectExist('clients','/' . $id . '/' . $file))
           $s3Client->putObject(array(
               'Bucket' => 'clients',
               'Key' => '/' . $clientId . '/' . $file,
               'Body' => $content,
               'ACL' => 'public-read'
           ));
   } catch (S3Exception $e) {
       $response = 'error';
   }
   return $response;
}
...

Я надеюсь, что это помогает вам.

person Conti    schedule 19.04.2015
comment
спасибо за ваш ответ, но вы не упомянули, куда поместить новую библиотеку? кроме того, что init_autoloader.php находится за пределами общедоступного, он находится в том же месте, что и общедоступный ... пожалуйста, не могли бы вы уточнить это немного больше ... - person user3911183; 20.04.2015
comment
При использовании Composer библиотека должна находиться в каталоге /myproyect/vendor/aws. Я предполагаю, что вы используете Composer через файл composer.json, который находится в /myproyect/composer.json. - person Conti; 20.04.2015
comment
Но я вижу, что вы ничего не меняли в файле init_autoloader.php... у меня тот же контент, также я не вижу, где вы объявили библиотеку aws (пространство имен, я думаю...) - person user3911183; 20.04.2015
comment
Посмотрите в начало файла, мы загружаем vendor/autoload.php, который является загрузчиком для всех библиотек, установленных через Composer. - person Conti; 20.04.2015