1

名前空間付きのクラスを持つ Yii プロジェクトを作成しています。私のクラスはすべて projectRoot/protected/src/myNamespace に保存されています このディレクトリにクラスを作成しましたMyNamespace/Amazon/Amazon.php

コントローラーはこんな感じ

use MyNamespace\Amazon\Amazon;
...
function actionIndex() {
    echo Amazon::getBucketFromKey('key');
}

オートローディングは完璧に機能し、このクラスがロードされました。

Amazon.php は次のようになります。

 class AmazonServer {

    public static function getBucketFromKey($key) {
    $criteria = new CDbCriteria;
    $criteria->select = 'bucket';
    $criteria->condition = 'userkey = :userkey AND enabled=:enabled';
    $criteria->params = array(':userkey' => $key, ':enabled' => 1);
    $bucket = Amazonuser::model()->find($criteria);

    if ($bucket === null) {
        throw new BucketNotFoundException('Bucket not found for this key.');
    } else {
        return $bucket->attributes['bucket'];
    }
  }
....

このスクリプトを実行すると、Yii がエラーを返します

 include(/var/www/yii3/vl/protected/config/../src/MyNamespace/Amazon/CDbCriteria.php): failed to open stream: No such file or directory

問題は$criteria = new CDbCriteria; にあります。

なぜこれが起こるのですか?グローバル名前空間から CDbCriteria やその他のクラスを正しく呼び出すにはどうすればよいですか?

新しい \CDbCriteria を呼び出しても役に立ちませんでした...

4

0 に答える 0