簡體   English   中英

傳遞給Aws \ AwsClient :: getCommand()的參數2必須是類型數組,字符串給定

[英]Argument 2 passed to Aws\AwsClient::getCommand() must be of the type array, string given

我從這個頁面跟着安裝。

這是SDK的第3版。 這里的基本用法。

<?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(), "/*");

根據這篇文章

可捕獲的致命錯誤:傳遞給Aws \\ AwsClient :: getCommand()的參數2必須是類型數組,給定的字符串,在/ Users / jason / www / aws / vendor / aws / aws-sdk-php / src / AwsClient中調用第167行的.php,第211行的/Users/jason/www/aws/vendor/aws/aws-sdk-php/src/AwsClient.php中的定義

此處更新和工作解決方案:

$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);

我看了一下這里發生了什么,顯然你正在使用無效的方法簽名。

首先,AWS PHP SDK使用稱為“服務描述模型”的東西來獲取您指定版本的API接口。 在這種情況下,這意味着他們使用一些元編程技術來提供看起來像普通PHP函數調用的接口,但這些函數在SDK中沒有硬編碼。 它們並不存在於我們通常認為的意義上,至少不像普通的PHP函數那樣存在。 一些PHP魔法正在下面發生。

當你調用$cdn->create_invalidation()它會在繼承自Aws\\AwsClient Aws\\CloudFront\\CloudFrontClient實例上Aws\\AwsClient 這些類(也沒有任何祖先)實際上都沒有::create_invalidation()方法實現。 但是AwsClient確實實現了PHP魔術方法::__call() 您可以在PHP文檔中查看有關此魔術方法的完整信息,但基本上當您調用對象上不存在的任何方法時,如果其類實現::__call() ,則將::__call()代替。

所以現在我們在::__call() (你可以看到這里的代碼),這個方法最終調用::getCommand() ::getCommand()內部,您可以看到方法簽名需要傳入一個數組(第一個參數$name ,是唯一的其他方法參數,並且由於以下方式,它將具有值"create_invalidation" ::__call()已在上面實現)。 這就是第一個問題出現的地方:你需要傳入一個數組,而不是單個字符串或時間戳或其他任何東西。

但還有另外一件事; 要調用的實際方法不是create_invalidation ,而是createInvalidation 有完整的API文檔的SDK 這里 -只要確保你選擇正確的版本。 對於我正在查看的版本,您可以在此處找到用於創建失效的API文檔和方法簽名。

您可以在項目的GitHub自述文件中找到有關AWS PHP SDK的大量信息,包括指向用戶指南,API文檔等的鏈接。 祝你好運,快樂編碼:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM