chemezov/yii2-yandex-cloud

为Yii2提供的Yandex Cloud组件

安装次数: 5,631

依赖项: 0

建议者: 0

安全性: 0

星标: 2

关注者: 1

分支: 56

类型:yii2-extension

v3.0.0 2019-06-12 08:08 UTC

README

Yii2的Yandex Cloud组件(从Amazon S3的Yii2组件分叉而来)。

License Latest Stable Version Total Downloads Latest Unstable Version

Yii2 AWS S3遵循SemVer

版本2.x需要PHP 7。对于PHP 7.0以下的版本,请使用1.x

安装

  1. 运行Composer命令以安装最新版本

    composer require chemezov/yii2-yandex-cloud
  2. 将组件添加到config/main.php

    'components' => [
        // ...
        's3' => [
            'class' => 'chemezov\yii2\yandex\cloud\Service',
            'credentials' => [ // Aws\Credentials\CredentialsInterface|array|callable
                'key' => 'my-key',
                'secret' => 'my-secret',
            ],
            'defaultBucket' => 'my-bucket',
        ],
        // ...
    ],

获取静态访问密钥

https://cloud.yandex.ru/docs/iam/operations/sa/create-access-key.

基本用法

使用命令工厂和额外参数

/** @var \chemezov\yii2\yandex\cloud\Service $s3 */
$s3 = Yii::$app->get('s3');

/** @var \Aws\ResultInterface $result */
$result = $s3->commands()->get('filename.ext')->saveAs('/path/to/local/file.ext')->execute();

$result = $s3->commands()->put('filename.ext', 'body')->withContentType('text/plain')->execute();

$result = $s3->commands()->delete('filename.ext')->execute();

$result = $s3->commands()->upload('filename.ext', '/path/to/local/file.ext')->withAcl('private')->execute();

$result = $s3->commands()->restore('filename.ext', $days = 7)->execute();

$result = $s3->commands()->list('path/')->execute();

/** @var bool $exist */
$exist = $s3->commands()->exist('filename.ext')->execute();

/** @var string $url */
$url = $s3->commands()->getUrl('filename.ext')->execute();

/** @var string $signedUrl */
$signedUrl = $s3->commands()->getPresignedUrl('filename.ext', '+2 days')->execute();

简短语法

/** @var \chemezov\yii2\yandex\cloud\Service $s3 */
$s3 = Yii::$app->get('s3');

/** @var \Aws\ResultInterface $result */
$result = $s3->get('filename.ext');

$result = $s3->put('filename.ext', 'body');

$result = $s3->delete('filename.ext');

$result = $s3->upload('filename.ext', '/path/to/local/file.ext');

$result = $s3->restore('filename.ext', $days = 7);

$result = $s3->list('path/');

/** @var bool $exist */
$exist = $s3->exist('filename.ext');

/** @var string $url */
$url = $s3->getUrl('filename.ext');

/** @var string $signedUrl */
$signedUrl = $s3->getPresignedUrl('filename.ext', '+2 days');

异步执行

/** @var \chemezov\yii2\yandex\cloud\Service $s3 */
$s3 = Yii::$app->get('s3');

/** @var \GuzzleHttp\Promise\PromiseInterface $promise */
$promise = $s3->commands()->get('filename.ext')->async()->execute();

$promise = $s3->commands()->put('filename.ext', 'body')->async()->execute();

$promise = $s3->commands()->delete('filename.ext')->async()->execute();

$promise = $s3->commands()->upload('filename.ext', 'source')->async()->execute();

$promise = $s3->commands()->list('path/')->async()->execute();

高级用法

/** @var \chemezov\yii2\yandex\cloud\interfaces\Service $s3 */
$s3 = Yii::$app->get('s3');

/** @var \chemezov\yii2\yandex\cloud\commands\GetCommand $command */
$command = $s3->create(GetCommand::class);
$command->inBucket('my-another-bucket')->byFilename('filename.ext')->saveAs('/path/to/local/file.ext');

/** @var \Aws\ResultInterface $result */
$result = $s3->execute($command);

// or async
/** @var \GuzzleHttp\Promise\PromiseInterface $promise */
$promise = $s3->execute($command->async());

自定义命令

命令有两种类型:由PlainCommandHandler处理的纯命令,以及有自己处理器的命令。纯命令包装了原生的AWS S3命令。

纯命令必须实现PlainCommand接口,其余的必须实现Command接口。如果命令没有实现PlainCommand接口,它必须有自己的处理器。

每个处理器都必须扩展Handler类或实现Handler接口。处理器在其构造函数中获取S3Client实例。

HasBucketHasAcl接口的实现允许命令构建器默认设置桶和acl的值。

为了使纯命令异步执行,你必须实现Asynchronous接口。你也可以使用Async特质来实现此接口。

考虑以下命令

<?php

namespace app\components\s3\commands;

use chemezov\yii2\yandex\cloud\base\commands\traits\Options;
use chemezov\yii2\yandex\cloud\interfaces\commands\Command;
use chemezov\yii2\yandex\cloud\interfaces\commands\HasBucket;

class MyCommand implements Command, HasBucket
{
    use Options;

    protected $bucket;

    protected $something;

    public function getBucket()
    {
        return $this->bucket;
    }

    public function inBucket(string $bucket)
    {
        $this->bucket = $bucket;

        return $this;
    }

    public function getSomething()
    {
        return $this->something;
    }

    public function withSomething(string $something)
    {
        $this->something = $something;

        return $this;
    }
}

此命令的处理程序看起来像这样

<?php

namespace app\components\s3\handlers;

use app\components\s3\commands\MyCommand;
use chemezov\yii2\yandex\cloud\base\handlers\Handler;

class MyCommandHandler extends Handler
{
    public function handle(MyCommand $command)
    {
        return $this->s3Client->someAction(
            $command->getBucket(),
            $command->getSomething(),
            $command->getOptions()
        );
    }
}

使用此命令

/** @var \chemezov\yii2\yandex\cloud\interfaces\Service */
$s3 = Yii::$app->get('s3');

/** @var \app\components\s3\commands\MyCommand $command */
$command = $s3->create(MyCommand::class);
$command->withSomething('some value')->withOption('OptionName', 'value');

/** @var \Aws\ResultInterface $result */
$result = $s3->execute($command);

自定义纯命令看起来像这样

<?php

namespace app\components\s3\commands;

use chemezov\yii2\yandex\cloud\interfaces\commands\HasBucket;
use chemezov\yii2\yandex\cloud\interfaces\commands\PlainCommand;

class MyPlainCommand implements PlainCommand, HasBucket
{
    protected $args = [];

    public function getBucket()
    {
        return $this->args['Bucket'] ?? '';
    }

    public function inBucket(string $bucket)
    {
        $this->args['Bucket'] = $bucket;

        return $this;
    }

    public function getSomething()
    {
        return $this->args['something'] ?? '';
    }

    public function withSomething($something)
    {
        $this->args['something'] = $something;

        return $this;
    }

    public function getName(): string
    {
        return 'AwsS3CommandName';
    }

    public function toArgs(): array
    {
        return $this->args;
    }
}

任何命令都可以扩展ExecutableCommand类或实现Executable接口,这将允许立即执行此命令:$command->withSomething('some value')->execute();

许可证

Yii2 AWS S3遵循MIT许可证。

有关更多信息,请参阅LICENSE文件。