私はしばらくの間、正常に自動ロードされるDoctrine_Recordクラスを使用してきました。しかし、少し読んだ後、Doctrine_Recordsとカスタムテーブルクラスの両方を実装することにしました。
だから私はこれを私のブートストラップに追加しました
$manager->setAttribute(
Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES,
true
);
これにより、カスタムテーブルクラスが正常に機能するようになりました...しかし、レコードの自動読み込みが機能しなくなります。
両方を自動ロードするにはどうすればよいですか?
IEの新しいUser.phpは私のUserDoctrine_Recordクラスを取得し、Doctrine_Core :: getTable('User')は私のカスタムUserTableクラスを取得します。
カスタムテーブルを実装しようとする前の外観(動作)は次のとおりです。
public function _initDoctrine() {
require_once 'Doctrine.php';
/*
* Autoload Doctrine Library and connect
* use appconfig.ini doctrine.dsn
*/
$this ->getApplication()
->getAutoloader()
->pushAutoloader(array(
'Doctrine',
'autoload'),
'Doctrine');
$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(
Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE,
true
);
$manager->setAttribute(
Doctrine::ATTR_MODEL_LOADING,
Doctrine::MODEL_LOADING_CONSERVATIVE
);
// try these custom tables out!
// $manager->setAttribute( Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true );
$config = $this->getOption('doctrine');
$conn = Doctrine_Manager::connection($config['dsn'], 'doctrine');
return $conn;
// can call flush on the connection to save any unsaved records
}
ありがとう
編集:
はっきりさせておきます。
カスタムクラスだけでなく、Doctrine_Recordを拡張するカスタムクラスをすでに使用しています。
class Model_User extends Doctrine_Record {}
$foo = new Model_User;
私のアプリケーションの多くは現在これを回避しており、その点で変更されることはありません。
ただし、カスタムテーブルも使用したいと思います
class UserTable extends Doctrine_Table {}
$bar = Doctrine_Core::getTable('User');
しかし、この(カスタムテーブルクラス)機能を有効にするとすぐに、テーブルサフィックスを利用してDoctrine_Tableのクラスを呼び出すことができます。以前に拡張して直接呼び出したDoctrine_Recordクラスは、機能しなくなります。両方を活用したい!