2

我有以下代码在 UserFrosting 之外按预期工作:

<?php
echo "Hello World.<br>";

require_once '../vendor/autoload.php';

use Aws\Common\Aws;

$aws = Aws::factory('../aws/aws-config.json');
$client = $aws->get('S3');

$bucket = 'my-public-public';

$iterator = $client->getIterator('ListObjects', array(
    'Bucket' => $bucket
));

foreach ($iterator as $object) {
    echo $object['Key'] . "<br>";
}

在我的 UserFrosting 实例上,我设法使用 Composer 成功加载aws-sdk-php

  - Installing aws/aws-sdk-php (3.19.24)
    Downloading: 100%

使用 Aws\Common\Aws;放在initialize.php中,下面是对 Slim 的引用:

use \Slim\Extras\Middleware\CsrfGuard;
use Aws\Common\Aws;

其余代码在控制器中:

    public function readS3(){
        $aws = Aws::factory('../aws/aws-config.json');
        $client = $aws->get('S3');
        ...
    }

我仍然收到以下错误:

未找到“UserFrosting\Aws”类。

我错过了什么?

4

1 回答 1

2

如您所见,它在类的UserFrosting\命名空间中查找Aws,但它显然不在其中!

您需要在要引用该类的每个use Aws\Common\Aws;文件的顶部。或者,您可以使用其完全限定名称简单地引用该类:Aws

$aws = \Aws\Common\Aws::factory('../aws/aws-config.json');

我建议花一个小时左右的时间来了解有关PHP 命名空间的更多信息。它们是现代 PHP 中极为重要的概念,与 Composer、自动加载和PSR-4 标准密切相关。

于 2016-11-14T20:52:43.893 回答