Skip to content

Commit

Permalink
update readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
frostealth committed Apr 9, 2016
1 parent 9cfd068 commit 4ceb5bf
Showing 1 changed file with 178 additions and 1 deletion.
179 changes: 178 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ An Amazon S3 component for Yii2.
1. Run the [Composer](http://getcomposer.org/download/) command to install the latest stable version:

```bash
composer require frostealth/yii2-aws-s3 ~2.0@stable
composer require frostealth/yii2-aws-s3 ~2.0@beta
```

2. Add the component to `config/main.php`
Expand Down Expand Up @@ -53,10 +53,13 @@ $result = $s3->commands()->upload('filename.ext', '/path/to/local/file.ext')->se
$result = $s3->commands()->restore('filename.ext', $days = 7)->execute();
/** @var bool $isExisting */
$isExisting = $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();
```
Expand All @@ -77,10 +80,13 @@ $result = $s3->upload('filename.ext', '/path/to/local/file.ext');
$result = $s3->restore('filename.ext', $days = 7);
/** @var bool $isExisting */
$isExisting = $s3->exist('filename.ext');
/** @var string $url */
$url = $s3->getUrl('filename.ext');
/** @var string $signedUrl */
$signedUrl = $s3->getPresignedUrl('filename.ext', '+2 days');
```
Expand All @@ -100,6 +106,177 @@ $promise = $s3->commands()->delete('filename.ext')->async()->execute();
$promise = $s3->commands()->upload('filename.ext', 'source')->async()->execute();
```
## Advanced usage
```php
/** @var \frostealth\yii2\aws\s3\interfaces\Service $s3 */
$s3 = Yii::$app->get('s3');
/** @var \frostealth\yii2\aws\s3\commands\GetCommand $command */
$command = $s3->create(GetCommand::class);
$command->setBucket('my-another-bucket')->setFilename('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());
```
### Custom commands
Commands are divided into two types: plain commands that's handled by the `PlainCommandHandler`
and commands with their own handlers.
The plain commands are wrappers around the native AWS S3 commands.
The plain commands must implement the `PlainCommand` interface and the rest must implement the `Command` interface.
The command that doesn't implement the `PlainCommand` interface must have its own handler.
Every handler must extend the `Handler` class or implement the `Handler` interface.
Handlers are getting the `S3Client` instance into its constructor.
The implementation of the `HasBucket` and `HasAcl` interfaces allows to the command builder to set the values
of bucket and acl by default.
To make the plain commands asynchronously, you have to implement the `Asynchronous` interface.
Also, you can use the `Async` trait to implement this interface.
Consider the following command:
```php
<?php
namespace app\components\s3\commands;
use frostealth\yii2\aws\s3\base\commands\traits\Options;
use frostealth\yii2\aws\s3\interfaces\commands\Command;
use frostealth\yii2\aws\s3\interfaces\commands\HasBucket;
class MyCommand implements Command, HasBucket
{
use Options;
protected $bucket;
protected $something;
public function getBucket(): string
{
return $this->bucket;
}
public function setBucket(string $bucket)
{
$this->bucket = $bucket;
return $this;
}
public function getSomething(): string
{
return $this->something;
}
public function setSomething(string $something)
{
$this->something = $something;
return $this;
}
}
```
The handler for this command looks like this:
```php
<?php
namespace app\components\s3\handlers;
use app\components\s3\commands\MyCommand;
use frostealth\yii2\aws\s3\base\handlers\Handler;
class MyCommandHandler extends Handler
{
public function handle(MyCommand $command)
{
return $this->s3Client->someAction(
$command->getBucket(),
$command->getSomething(),
$command->getOptions()
);
}
}
```
And usage this command:
```php
/** @var \frostealth\yii2\aws\s3\interfaces\Service */
$s3 = Yii::$app->get('s3');
/** @var \app\components\s3\commands\MyCommand $command */
$command = $s3->create(MyCommand::class);
$command->setSomething('some value')->setOption('OptionName', 'value');
/** @var \Aws\ResultInterface $result */
$result = $s3->execute($command);
```
Custom plain command looks like this:
```php
<?php
namespace app\components\s3\commands;
use frostealth\yii2\aws\s3\interfaces\HasBucket;
use frostealth\yii2\aws\s3\interfaces\PlainCommand;
class MyPlainCommand implements PlainCommand, HasBucket
{
protected $args = [];
public function getBucket(): string
{
return $this->args['Bucket'] ?? '';
}
public function setBucket(string $bucket)
{
$this->args['Bucket'] = $bucket;
return $this;
}
public function getSomething(): string
{
return $this->args['something'] ?? '';
}
public function setSomething(string $something)
{
$this->args['something'] = $something;
return $this;
}
public function getName(): string
{
return 'AwsS3CommandName';
}
public function toArgs(): array
{
return $this->args;
}
}
```
Any command can extend the `ExecutableCommand` class or implement the `Executable` interface that will
allow to execute this command immediately looking like this: `$command->setSomething('some value')->execute();`.
## License
Yii2 AWS S3 is licensed under the MIT License.
Expand Down

0 comments on commit 4ceb5bf

Please sign in to comment.