名前空間付きのクラスを持つ 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 を呼び出しても役に立ちませんでした...