saeven / laminas-aws-sdk
Laminas 模块,允许轻松集成 AWS SDK for PHP
Requires
- php: ^7.4
- aws/aws-sdk-php: 3.*
- laminas/laminas-filter: ^2.11.0
- laminas/laminas-servicemanager: ^3.7.0
- laminas/laminas-session: ^2.7.0
- laminas/laminas-view: ^2.14.0
Requires (Dev)
- laminas/laminas-coding-standard: ^2.3.0
- laminas/laminas-modulemanager: ^2.11.0
- phpstan/phpstan: 1.1.1
- phpunit/phpunit: 7.5.20
- squizlabs/php_codesniffer: 3.6.1
README
此模块为 AWS SDK for PHP 提供了一个简单的包装器。它将 AWS 服务构建器注册为 ZF2 服务管理器中的一个服务,使您可以在应用程序的任何地方轻松访问。
跳转到
入门
安装
使用 Composer 将模块安装到应用程序的 vendor 目录。在您的 composer.json
中添加以下行。这也会安装 AWS SDK for PHP。
如果您想使用 ZF3
并且您的 PHP 版本 >= 5.6,使用
{ "require": { "aws/aws-sdk-php-zf2": "4.*" } }
否则,
{ "require": { "aws/aws-sdk-php-zf2": "3.*" } }
如果您正在使用 ZF2 服务管理器 < 2.7,请使用 2.0.* 版本。
如果您正在使用 AWS SDK v2,请使用 ZF2 模块的 1.2.* 版本。
配置
将模块名称添加到您的项目 config/application.config.php
或 config/modules.config.php
return array( /* ... */ 'modules' => array( /* ... */ 'AwsModule' ), /* ... */ );
将 aws.local.php.dist
文件复制并粘贴到您的 config/autoload
文件夹中,并使用您的凭据和其他配置设置进行自定义。请确保从您的文件中删除 .dist
。您的 aws.local.php
文件可能看起来像以下示例
<?php return [ 'aws' => [ 'credentials' => [ 'key' => '<your-aws-access-key-id>', 'secret' => '<your-aws-secret-access-key>', ] 'region' => 'us-west-2' ] ];
注意:如果您正在使用 IAM 实例配置文件凭据(也称为 IAM 实例角色),您可以选择省略
key
和secret
参数,因为它们将自动从 Amazon EC2 实例中获取。
使用方法
您可以从 ZF2 服务定位器可用的任何地方获取 AWS 服务构建器对象(例如控制器类)。以下示例实例化了 Amazon DynamoDB 客户端并在 DynamoDB 中创建了一个表。
use Aws\Sdk; public function indexAction() { $aws = $this->getServiceLocator()->get(Sdk::class); $client = $aws->createDynamoDb(); $table = 'posts'; // Create a "posts" table $result = $client->createTable(array( 'TableName' => $table, 'KeySchema' => array( 'HashKeyElement' => array( 'AttributeName' => 'slug', 'AttributeType' => 'S' ) ), 'ProvisionedThroughput' => array( 'ReadCapacityUnits' => 10, 'WriteCapacityUnits' => 5 ) )); // Wait until the table is created and active $client->waitUntilTableExists(array('TableName' => $table)); echo "The {$table} table has been created.\n"; }
视图助手
AWS SDK ZF2 模块现在提供了两个视图助手,用于生成 Amazon S3 和 Amazon CloudFront 资源的链接。
注意:从 AWS 模块的 v2 版本开始,S3 和 CloudFront 的所有 URL 都使用 HTTPS,并且不能进行修改。
S3Link 视图助手
在您的视图中创建 S3 链接
<?php echo $this->s3Link('my-object', 'my-bucket');
可以使用 setDefaultBucket
方法全局设置默认存储桶。
<?php $this->plugin('s3Link')->setDefaultBucket('my-bucket'); echo $this->s3Link('my-object');
您还可以通过传递第三个参数(即过期日期)来创建私有内容的签名 URL。
<?php echo $this->s3Link('my-object', 'my-bucket', '+10 minutes');
CloudFrontLink 视图助手
在您的视图中创建 CloudFront 链接
<?php echo $this->cloudFrontLink('my-object', 'my-domain');
可以使用 setDefaultDomain
方法全局设置默认域名。
<?php $this->plugin('cloudFrontLink')->setDefaultDomain('my-domain'); echo $this->cloudFrontLink('my-object');
您还可以通过传递第三个参数(即过期日期)来创建私有内容的签名 URL。
<?php echo $this->cloudFrontLink('my-object', 'my-bucket', time() + 60);
过滤器
AWS SDK ZF2 模块提供了一个简单的文件过滤器,允许直接上传到 S3。《S3RenameUpload》扩展了《RenameUpload》类,因此请参阅其文档以获取可用选项。
此过滤器只添加了一个选项来设置存储桶名称(通过 setBucket
方法或通过将 bucket
键传递到过滤器的 setOptions
方法)。
$request = new Request(); $files = $request->getFiles(); // e.g., $files['my-upload']['tmp_name'] === '/tmp/php5Wx0aJ' // e.g., $files['my-upload']['name'] === 'profile-picture.jpg' // Fetch the filter from the Filter Plugin Manager to automatically handle dependencies $filter = $serviceLocator->get('FilterManager')->get('S3RenameUpload'); $filter->setOptions(’[ 'bucket' => 'my-bucket', 'target' => 'users/5/profile-picture.jpg', 'overwrite' => true ]); $filter->filter($files['my-upload']); // File has been renamed and moved to 'my-bucket' bucket, inside the 'users/5' path
会话保存处理程序
有关更多信息,请参阅 ZF2 文档中的[会话保存处理程序部分](http://zf2.readthedocs.org/en/latest/modules/zend.session.save-handler.html)。
DynamoDB
按照[ZF2示例](http://zf2.readthedocs.org/en/latest/modules/zend.session.save-handler.html)(http://zf2.readthedocs.org/en/latest/modules/zend.session.save-handler.html),DynamoDB会话保存处理程序可能使用如下方式
use AwsModule\Session\SaveHandler\DynamoDb as DynamoDbSaveHandler; use Laminas\Session\SessionManager; // Assume we are in a context where $serviceLocator is a ZF2 service locator. $saveHandler = $serviceLocator->get(DynamoDbSaveHandler::class); $manager = new SessionManager(); $manager->setSaveHandler($saveHandler);
你可能还想进一步配置保存处理程序,你可以在你的应用程序中这样做。你可以将config/aws_zf2.local.php.dist
文件复制到你的项目的config/autoload
目录中(当然不包括.dist
)。
请参阅config/aws_zf2.local.php.dist
和[AWS会话处理程序文档](http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.DynamoDb.Session.SessionHandler.html#_factory)(http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.DynamoDb.Session.SessionHandler.html#_factory)以获取更详细的配置信息。
获取帮助
请使用以下社区资源来获取帮助。我们使用GitHub问题来跟踪错误和功能请求,并且有限的能力来处理它们。
- 在StackOverflow上提问,并使用
aws-php-sdk
标签 - 加入AWS SDK for PHP的gitter
- 通过AWS Support提交支持票据
- 如果你发现可能是一个错误,请打开一个问题
此SDK实现了AWS服务API。有关AWS服务和它们的限制的一般问题,你也可以看看Amazon Web Services讨论论坛。
打开问题
如果你遇到aws-sdk-php-zf2
的错误,我们希望听到你的反馈。搜索现有的问题,并确保在打开新问题之前你的问题尚未存在。如果你包括aws-sdk-php-zf2
的版本、PHP版本和你使用的操作系统版本,这将很有帮助。在适当的时候,请包括堆栈跟踪和简化的重现案例。
GitHub问题旨在用于错误报告和功能请求。对于使用aws-sdk-php
的帮助和问题,请使用获取帮助部分中列出的资源。可用于处理问题的资源有限,通过保持打开问题的列表精简,我们可以及时回应。
贡献
我们努力为我们提供的AWS服务提供高质量且有用的SDK,我们非常重视社区的意见和贡献。在提交任何问题或拉取请求之前,请查看我们的贡献指南,以确保我们拥有所有必要的信息,以便有效地回应你的错误报告或贡献。
相关模块
以下是一些使用AWS SDK for PHP的ZF2模块
- SlmMail - 允许使用各种提供商发送电子邮件的模块(包括Amazon SES)
- SlmQueueSqs – 简化Amazon SQS使用的模块