实例化从AwsClient子类扩展的类时出错

时间:2018-01-15 23:52:41

标签: php amazon-web-services aws-php-sdk

我正在扩展我的自定义Sqs类:

class Sqs extends SqsClient
{
    public function __construct()
    {
        parent::__construct(array(
            'credentials' => array(
                'key' => $_ENV['AWS_ACCESS_KEY_ID'],
                'secret' => $_ENV['AWS_SECRET_ACCESS_KEY'],
            ),
            'region' => 'us-west-1',
            'version' => 'latest'
        ));
    }
}

然后我实例化并使用它:

$sqs = new Sqs();
$sqs->sendMessage([
    'QueueUrl' => $_ENV['AWS_SQS_URL_PREFIX'] . '/' . $_ENV['AWS_SQS_READER_USER_CREATE'],
    'MessageBody' => $user_json,
    'MessageGroupId' => 1,
    'MessageDeduplicationId' => uniqid(),
]);

但是我得到了一个奇怪的错误:

The service \"\" is not provided by the AWS SDK for PHP.

2 个答案:

答案 0 :(得分:2)

AWS API使用反射来根据类名确定他们要连接的AWS服务。如果是这种情况,您可以尝试调用您的类SqsClient,例如

use Aws\Sqs\SqsClient as BaseSqsClient;

class SqsClient extends BaseSqsClient 
{
     //...
}

答案 1 :(得分:0)

对于任何将来遇到麻烦的人来说,一种替代方法-将service作为配置数组中的一个元素传递也可以:

class MyWafClient extends WafClient
{
    public function __construct(array $args = [])
    {
        $args['service'] = 'waf';
        parent::__construct($args);
    }

    ...
}