【问题标题】:UserFrosting & AWS SDKUserFrosting 和 AWS 开发工具包
【发布时间】:2016-11-14 18:13:01
【问题描述】:

我有以下代码在 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”。

我错过了什么?

【问题讨论】:

    标签: php amazon-web-services amazon-s3 aws-sdk userfrosting


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 除此之外,如果不查看更多代码上下文以了解在何处/如何调用 UserFrosting 命名空间,则无法解决 OP 的特定错误,但这个答案应该让 OP 指向正确的方向。
    • @MikeBrant 在这个版本的 UserFrosting 中大多数controller filesnamespace UserFrosting; 开头。因此,如果 OP 不熟悉命名空间,他们可能不会意识到 PHP 会将其视为所有对类的引用的命名空间,除非另有明确声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2012-05-24
    • 2015-04-07
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多