Ошибка при создании экземпляра класса, расширенного из подкласса AwsClient

Я расширяю свой собственный класс 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.

1 ответ

Решение

API-интерфейсы AWS используют отражение, чтобы выяснить, к какому сервису AWS они подключаются, на основе имени класса. Если это так, вы можете попробовать вызвать класс SqsClient, например,

use Aws\Sqs\SqsClient as BaseSqsClient;

class SqsClient extends BaseSqsClient 
{
     //...
}

Альтернатива для любого другого, кто столкнется с этим в будущем - прохождение service В качестве элемента в массиве config также работает:

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

    ...
}
Другие вопросы по тегам