2015-09-22 26 views
9

this pageからインストールを続けました。Aws AwsClient :: getCommand()に渡される引数2は、配列型の文字列でなければなりません。

SDKのバージョン3はどれですか。基本的な使用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(), "/*"); 

this articleによると、

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

はこちら&作業溶液を更新:

$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

これに対する答えを知りたいですか?私は同じことをして、それを理解することはできません。 – Claude

答えて

2

私はここで何が起こっていたかを見ていたと明らかに無効なメソッドのシグネチャを使用しています。

まず、AWS PHP SDKは、「サービス記述モデル」と呼ばれるものを使用して、指定したバージョンのAPIインターフェイスを取得します。この場合、通常のPHP関数呼び出しのようなインターフェースを提供するためにいくつかのメタプログラミング技術を使用していますが、関数はSDKでハードコードされていません。それらは、通常のPHP関数ではなく、一般的に考えている意味では実際には存在しません。いくつかのPHPの魔法が下に起こっています。

$cdn->create_invalidation()を呼び出すと、Aws\AwsClientを継承するAws\CloudFront\CloudFrontClientインスタンスで実行されます。これらのクラス(またはそれらの祖先)のどちらも実際には::create_invalidation()メソッド実装を持っていません。しかし、AwsClientはPHPマジックメソッド::__call()を実装しています。このマジックメソッドの詳細については、the PHP docsを参照してください。オブジェクトに存在しないメソッドを呼び出すと、そのクラスに::__call()が実装されている場合は、代わりに::__call()が呼び出されます。

ここでは::__call()(コードhereが表示されます)があり、このメソッドは::getCommand()を呼び出して終了します。 メソッドシグネチャでは、配列が渡される必要があることがわかります(最初の引数$nameは唯一の他のメソッドパラメータで、の値を持ちます)。::__call()が実装されています。つまり、最初の問題が発生します。個々の文字列やタイムスタンプなどではなく、配列を渡す必要があります。

しかし、もう1つのことがあります。実際に呼び出す方法はcreate_invalidationではなく、createInvalidationとなります。 SDK hereの完全なAPIドキュメントがあります。正しいバージョンを選んでください。私が見ているバージョンでは、無効化を作成するためのAPIドキュメントとメソッドシグネチャを見つけることができますhere

AWS PHP SDKに関する多くの情報は、プロジェクトのGitHub readmeにあるユーザーガイド、APIドキュメントなどへのリンクを含んでいます。幸運と幸せコーディング:)

+1

私はhttp://docs.aws.amazon.com/AWSSDKforPHP/latest/index.html#m=AmazonCloudFront/create_invalidationを実行し続けました。 – Jason

+0

ええ、それは間違いなく変です。おそらく時代遅れで、誰かがそれが現在のPHP SDKの誤解を招いている(そして間違っている)ことを認識していなかったか、最新のSDKバージョンのドキュメントの新しい場所があるという通知をどこかに置いたと思います。とにかく、https://aws.amazon.com/(ページの一番下、「リソース&トレーニング」の下の「PHP on AWS」リンク)、またはhttps://aws.amazon。com/tools /( "Documentation"、 "PHP")、正しいページにリンクされます。このページはhttp://docs.aws.amazon.com/aws-sdk-php/にフォローできます。 v3/api/class-Aws.CloudFront.CloudFrontClient.html。 –

+0

なぜあなたは答えてくれませんか?**何をすべきですか? –

関連する問題