Аргумент 2, передаваемый AwsAwsClient:: getCommand (), должен иметь тип array, string given
Я следил за установкой с этой страницы .
Которая является версией 3 SDK. Основное использование здесь .
<?php
require 'vendor/autoload.php';
use AwsCloudFrontCloudFrontClient;
$cdn = new CloudFrontClient(
['version' => 'latest',
'region' => 'us-east-1']
);
// Create a new invalidation.
$response = $cdn->create_invalidation('EPYAAAAAAPAA', 'aws-clear-cache' . time(), "/*");
Согласно этой статье.
Уловимая фатальная ошибка: Аргумент 2 передается в AwsAwsClient:: getCommand() должен иметь тип array, string given, приглашать /Пользователи/Джейсон/ВСП/АРМ/поставщика/АРМ/АРМ-СДК-РНР/ГРЦ/AwsClient.php on line 167 и определяется в /Пользователи/Джейсон/ВСП/АРМ/поставщика/АРМ/АРМ-СДК-РНР/ГРЦ/AwsClient.php on line 211
ОБНОВЛЕННОЕ И РАБОЧЕЕ РЕШЕНИЕ ЗДЕСЬ:
$config = array(
'region' => 'us-east-1',
'version' => '2015-07-27',
'credentials' => array(
'key' => env('AMAZON_KEY_CLOUDFRONT'),
'secret' => env('AMAZON_SECRET_CLOUDFRONT')
)
);
$cdn = new CloudFrontClient($config);
$cache = array('DistributionId' => env('CLOUDFRONT'),
'InvalidationBatch' => array(
'CallerReference' => 'none',
'Paths' => array(
'Quantity' => 1,
'Items' => array( 'test' => '/*')
)
)
);
// Create a new invalidation.
$response = $cdn->createInvalidation($cache);
var_dump($response);
1 ответ:
Я взглянул на то, что здесь происходит, и, по-видимому, вы используете недопустимую сигнатуру метода.
Прежде всего, AWS PHP SDK использует нечто под названием "модели описания служб" для получения интерфейса API для указанной вами версии. В данном случае это означает, что они используют некоторые методы метапрограммирования, чтобы обеспечить интерфейс для того, что выглядит как обычные вызовы функций PHP, но функции не жестко закодированы в SDK. Они на самом деле не существуют в том смысле, в котором мы обычно думайте, по крайней мере, не как обычные функции PHP. Какая-то магия PHP происходит внизу.
При вызове
$cdn->create_invalidation()
он запускается на экземпляреAws\CloudFront\CloudFrontClient
, который наследует отAws\AwsClient
. Ни один из этих классов (ни один из их предков) на самом деле не имеет реализации метода::create_invalidation()
. НоAwsClient
реализует волшебный метод PHP::__call()
. Вы можете посмотреть PHP docs для полной информации об этом волшебном методе, но в основном, когда вы вызываете любой метод, который не существует на объекте, если его класс реализует::__call()
, то вместо этого будет вызван::__call()
.Итак, теперь мы внутри
Но есть еще одна вещь; фактический метод, который вы хотите вызвать, называется не::__call()
(Вы можете увидеть код здесь), и этот метод заканчивается вызовом::getCommand()
. внутри::getCommand()
Вы можете видеть, что сигнатура метода требует, чтобы массив был передан (первый аргумент,$name
, является единственным другим параметром метода, и он будет иметь значение"create_invalidation"
из-за способа::__call()
был реализован выше). Вот тут-то и возникает первая проблема: вам нужно пройти внутрь массив, а не отдельные строки или метки времени или что-то еще.create_invalidation
, аcreateInvalidation
. Здесь есть полные документы API для SDK - просто убедитесь, что вы выбрали правильную версию. Для версии, которую я рассматриваю, вы можете найти API docs и подпись метода для создания недействительности здесь.Вы можете найти много информации о AWS PHP SDK, включая ссылки на руководство пользователя, API Docs, и многое другое, в проекте GitHub readme. Удачи и счастливого кодирования:)