aws / aws-sdk-php-zf2
允许轻松集成PHP AWS SDK的Zend Framework 2模块
Requires
- php: ^5.6 || ^7.0
- aws/aws-sdk-php: 3.*
- laminas/laminas-filter: ^2.9.0
- laminas/laminas-servicemanager: ^2.7.0 || ^3.0
- laminas/laminas-session: ^2.7.0
- laminas/laminas-view: ^2.8
Requires (Dev)
- laminas/laminas-modulemanager: 2.7.*
- phpunit/phpunit: 5.*
- squizlabs/php_codesniffer: ~2.3
README
此模块为PHP AWS SDK提供了一个简单的包装器。它将AWS服务构建器注册为ZF2服务管理器中的一个服务,使其在应用程序的任何地方都易于访问。
跳转到
入门
安装
使用Composer在应用程序的vendor目录中安装模块。将以下行添加到您的composer.json
。这将还安装PHP AWS SDK。
如果您想使用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),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) 获取更详细的配置信息。
获取帮助
请使用以下社区资源获取帮助。我们使用 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 的模块