aws/aws-sdk-php-zf2

允许轻松集成PHP AWS SDK的Zend Framework 2模块

4.4.0 2022-04-29 21:20 UTC

README

Latest Stable Version Total Downloads Build Status

此模块为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.phpconfig/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实例角色),您可以将keysecret参数省略,因为它们将自动从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 问题跟踪错误和功能请求,并且有有限的带宽来解决它们。

此 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 的模块

资源