传递给Aws\AwsClient :: getCommand()的参数2必须是类型数组,给定字符串

Jas*_*son 10 php api amazon-web-services

我从这个页面跟着安装.

这是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(), "/*");
Run Code Online (Sandbox Code Playgroud)

根据这篇文章.

可捕获的致命错误:传递给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);
Run Code Online (Sandbox Code Playgroud)

nc.*_*nc. 3

我查看了这里发生的情况,显然您正在使用无效的方法签名。

首先,AWS PHP SDK 使用称为“服务描述模型”的东西来获取您指定版本的 API 接口。在这种情况下,这意味着他们正在使用一些元编程技术来提供看似正常 PHP 函数调用的接口,但这些函数并未硬编码在 SDK 中。它们并不像我们通常认为的那样存在,至少不是常规的 PHP 函数。下面正在发生一些 PHP 魔法。

当您调用时,它在继承自 的实例$cdn->create_invalidation()上运行。这些类(或其任何祖先)实际上都没有方法实现。但确实实现了 PHP 魔术方法。您可以查看PHP 文档以获取有关此魔术方法的完整信息,但基本上,当您调用对象上不存在的任何方法时,如果其类实现了,则将被调用。Aws\CloudFront\CloudFrontClientAws\AwsClient::create_invalidation()AwsClient::__call()::__call()::__call()

现在我们进入了(您可以在此处::__call()查看代码),并且该方法最终调用. 在里面你可以看到方法签名需要传入一个数组(第一个参数,是唯一的其他方法参数,并且由于上面实现的方式,它将具有该值)。这就是第一个问题出现的地方:您需要传入一个数组,而不是单个字符串或时间戳或其他任何东西。::getCommand()::getCommand()$name"create_invalidation"::__call()

但还有一件事;您要调用的实际方法不是调用create_invalidation,而是createInvalidation这里有 SDK 的完整 API 文档- 只要确保您选择正确的版本即可。对于我正在查看的版本,您可以在此处找到用于创建失效的 API 文档和方法签名。

您可以在项目的GitHub 自述文件中找到有关 AWS PHP SDK 的大量信息,包括指向用户指南、API 文档等的链接。祝你好运,编码愉快:)

  • 为什么你不能回答**做什么**? (3认同)