2016-11-14 13 views
1

私はUserFrosting外で期待どおりに動作し、次のコードを持っている:私の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>"; 
} 

は、私は正常Composerで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

これに加えて、 'UserFrosting'名前空間がどこで/どのように呼び出されたかを理解するために、より多くのコードコンテキストを見ることなくOPの特定のエラーに対処する方法はありませんが、この答えはOPを正しい方向に向けるべきです。 –

+0

@MikeBrantこのバージョンのUserFrostingのほとんどの[コントローラファイル](https://github.com/userfrosting/UserFrosting/blob/master/userfrosting/controllers/AccountController.php)は、先頭に 'namespace UserFrosting;'で始まります。したがって、OPが名前空間に精通していない場合、明示的に宣言されていない限り、PHPはこれをクラスへのすべての参照の名前空間と見なすことに気付かないでしょう。 – alexw