2016-11-14 5 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-СДК-PHP с Composer:

- 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

Как вы можете видеть, это выглядит в пространстве имен UserFrosting\ для класса Aws, но он явно не живет там!

Вам нужен use Aws\Common\Aws; в верхней части каждый файл, в котором вы хотите ссылаться на класс Aws. Кроме того, вы можете просто ссылаться на класс, используя его полное имя:

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

Я хотел бы предложить за один час или около того, чтобы узнать больше о PHP Namespaces. Они являются чрезвычайно важной концепцией в современном PHP и тесно связаны с композитором, автозагрузкой и PSR-4 standard.

+1

Чтобы добавить к этому, нет возможности адресовать конкретную ошибку OP, не видя больше контекста кода, чтобы понять, где/как вызывается пространство имен 'UserFrosting', но этот ответ должен получить указание OP в правильном направлении. –

+0

@MikeBrant Большинство [файлов контроллеров] (https://github.com/userfrosting/UserFrosting/blob/master/userfrosting/controllers/AccountController.php) в этой версии UserFrosting начинаются с 'namespace UserFrosting;' вверху. Поэтому, если OP не знаком с пространствами имен, они, вероятно, не понимают, что PHP будет рассматривать это пространство имен для ВСЕХ ссылок на классы, если явно не указано иначе. – alexw