2016-11-14 50 views
1

我已經按預期工作外UserFrosting下面的代碼:UserFrosting與AWS SDK

<?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比如我設法成功加載AWS-SDK-PHP與作曲:

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

使用Aws \ Common \ Aws;置於initialize.php,下面參照苗條:

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

的代碼的其餘部分是在所述控制器:

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

我仍然得到以下錯誤:

Class 'UserFrosting\Aws' not found.

我錯過了什麼?

回答

2

正如您所看到的,它正在尋找Aws類的UserFrosting\名稱空間,但它顯然不在此處!

您需要在的頂部use Aws\Common\Aws;文件您想要參考類Aws。或者,你可以使用它的完全合格的名稱只是引用類:

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

我建議採取一個小時左右,以瞭解更多有關PHP Namespaces。它們在現代PHP中是一個非常重要的概念,並且與Composer,自動加載和PSR-4 standard密切相關。

+1

爲了增加這一點,沒有辦法解決OP的特定錯誤,而沒有看到更多的代碼上下文來了解UserFrosting命名空間在哪裏/如何被調用,但是這個答案應該使OP指向正確的方向。 –

+0

@MikeBrant這個版本的UserFrosting中的大部分[controller文件](https://github.com/userfrosting/UserFrosting/blob/master/userfrosting/controllers/AccountController.php)都以'namespace UserFrosting;'開頭。因此,如果OP不熟悉命名空間,他們可能不會意識到PHP會認爲這是所有對類的引用的命名空間,除非另有明確聲明。 – alexw