WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート [Doctrine] Baseクラスのオートロードに失敗

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

propelは、特にCriteriaがどうも好きになれなかったのですがDoctrineは良さそうなので、とりあえず、単体で使ってみれば理解の助けになるかなあ、といじってみてます。

本家のチュートリアルをやっていてエラーが出て旨く動かないところがありました。


Doctrine::loadModels('models');
モデルをロードして

$user = new User();
$user->username = 'jwage';
$user->password = 'changeme';

echo $user->password; // outputs md5 hash and not changeme
実行したところ

Fatal error: Class 'BaseUser' not found in /home/sites/doctrine.gomo.jp/web/models/User.php on line 13
Baseクラスの読み込みに失敗しました。動かすには

$manager->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);
ATTR_MODEL_LOADINGをMODEL_LOADING_CONSERVATIVEに設定してやると動くようになります。デフォルトではMODEL_LOADING_AGGRESSIVEになってます。

MODEL_LOADING_CONSERVATIVEはクラス名とそのパスを保持していて、そのクラスが必要な時に読み込まれるいわゆるLasy loadです。その際指定したフォルダにフォルダがあった場合はしたの階層もリスト化します。

対してMODEL_LOADING_AGGRESSIVEはDoctrine::loadModelsで指定したフォルダにあるクラスを一気にrequireします。指定したフォルダの直下のクラスしか読み込まないようです。

流し読みしないで、最初から順を追ってやってればこの問題には引っかからないのですが、このページより前にDoctrine::ATTR_MODEL_LOADINGを切り替える意味について詳細な説明がないので、ざっくり読み飛ばしてました。
スポンサーサイト

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。