2015-09-22 8 views
9

Ich folgte Installation von this page.Argument 2 an Aws AwsClient :: getCommand() muss vom Typ array, string

Welches ist Version 3 des SDK. Grundlegende Verwendung here.

<?php 
require 'vendor/autoload.php'; 

use Aws\CloudFront\CloudFrontClient; 
$cdn = new CloudFrontClient(
['version' => 'latest', 
'region' => 'us-east-1'] 
); 

// Create a new invalidation. 
$response = $cdn->create_invalidation('EPYAAAAAAPAA', 'aws-clear-cache' . time(), "/*"); 

Nach .

Catchable fatal error: Argument 2 passed to Aws\AwsClient::getCommand() must be of the type array, string given, called in /Users/jason/www/aws/vendor/aws/aws-sdk-php/src/AwsClient.php on line 167 and defined in /Users/jason/www/aws/vendor/aws/aws-sdk-php/src/AwsClient.php on line 211

& Arbeitslösung HIER AKTUALISIERT:

$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

Würde gerne die Antwort darauf wissen. Ich bekomme das gleiche und kann es nicht herausfinden. – Claude

Antwort

2

ich einen Blick nahm, was hier los war und offenbar sind Sie eine ungültige Methode Signatur.

Zunächst verwendet das AWS PHP SDK etwas namens "Servicebeschreibungsmodelle", um eine API-Schnittstelle für die von Ihnen angegebene Version zu erhalten. In diesem Fall bedeutet das, dass sie einige Metaprogrammierungstechniken verwenden, um eine Schnittstelle zu normalen PHP-Funktionsaufrufen bereitzustellen, aber die Funktionen sind im SDK nicht fest programmiert. Sie existieren nicht wirklich in dem Sinne, wie wir allgemein denken, zumindest nicht als reguläre PHP-Funktionen. Etwas PHP Magie läuft darunter.

Wenn Sie $cdn->create_invalidation() aufrufen, läuft es auf der Aws\CloudFront\CloudFrontClient Instanz, die von Aws\AwsClient erbt. Keine dieser Klassen (noch keiner ihrer Vorfahren) hat tatsächlich eine ::create_invalidation() Methodenimplementierung. Aber AwsClient implementiert die magische PHP-Methode ::__call(). Sie können the PHP docs für die vollständige Info über diese magische Methode sehen, aber im Grunde, wenn Sie eine Methode aufrufen, die nicht für ein Objekt existiert, wenn seine Klasse ::__call() implementiert, wird stattdessen ::__call() aufgerufen.

So jetzt sind wir innerhalb von ::__call() (Sie können den Code here sehen) und diese Methode endet Aufruf ::getCommand(). Sie können sehen, dass die Methodensignatur erfordert, dass ein Array übergeben wird (das erste Argument, $name, ist der einzige andere Methodenparameter, und es wird den Wert "create_invalidation" wegen der Art haben, wie ::__call() oben implementiert wurde). Hier taucht das erste Problem auf: Sie müssen ein Array übergeben, nicht einzelne Strings oder Zeitstempel oder irgendetwas anderes.

Aber es gibt noch eine andere Sache; Die tatsächliche Methode, die Sie aufrufen möchten, heißt nicht create_invalidation, sondern createInvalidation. Es gibt vollständige API-Dokumente für das SDK here - stellen Sie nur sicher, dass Sie die richtige Version auswählen. Für die Version, die ich betrachte, können Sie die API-Dokumentation und die Methodensignatur zum Erstellen von Invalidierungen finden here.

Sie finden viele Informationen zum AWS PHP SDK mit Links zu einem Benutzerhandbuch, API-Dokumenten und mehr im Projekt GitHub readme. Viel Glück und glückliche Codierung :)

+1

Ich lief weiter in http://docs.aws.amazon.com/AWSSDKforPHP/latest/index.html#m=AmazonCloudFront/create_invalidation wo es herkam. – Jason

+0

Ja, das ist definitiv komisch; Es ist wahrscheinlich veraltet und jemand hat nicht bemerkt, dass es irreführend (und falsch) für das aktuelle PHP SDK ist, oder ich bin mir sicher, dass es irgendwo einen Hinweis darauf gegeben hätte, dass es einen neuen Speicherort für die neuesten SDK-Versionen gibt. Wie auch immer, wenn du auf https://aws.amazon.com/ gehst (ganz unten auf der Seite, einen "PHP on AWS" -Link unter "Resources & Training"), oder https: //aws.amazon.com/tools/("Dokumentation", unter "PHP"), dann werden Sie mit der richtigen Seite verlinkt, die Sie auf http://docs.aws.amazon.com/aws-sdk-php/ verfolgen können. v3/api/class-Aws.CloudFront.CloudFrontClient.html. –

+0

Warum können Sie bitte antworten ** was zu tun **? –

Verwandte Themen