我一直在使用Doctrine_Record课程,这些课程可以自动加载一段时间;但经过一些阅读后,我决定实施Doctrine_Records和Custom Table Classes。
所以我把它添加到我的bootstrap
$manager->setAttribute(
Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES,
true
);
这使得Custom表类工作得很好......但它打破了自动加载记录!
如何同时进行自动加载?
即。 new User.php获取我的User Doctrine_Record类,Doctrine_Core :: getTable('User')获取我的Custom 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;
我的大部分申请目前都在解决这个问题,并且不会在这方面发生变化。
但是,我想 ALSO 使用Custom Tables
class UserTable extends Doctrine_Table {}
$bar = Doctrine_Core::getTable('User');
但是,只要我启用此(自定义表类)功能,就可以使用Table后缀调用Doctrine_Table类。我之前扩展并直接调用的任何Doctrine_Record类都停止工作了!我想利用两者!
答案 0 :(得分:0)
我真的不明白你的自定义类的问题,但无论如何这里是我在ZF中使用mysql和UTF-8的Doctrine 1.2.4的引导程序。它不需要require()并且可以完美地加载我的所有模型。
protected function _initDoctrine()
{
$this->getApplication()->getAutoloader()
->pushAutoloader(array('Doctrine', 'autoload'));
spl_autoload_register(array('Doctrine', 'modelsAutoload'));
$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
$manager->setAttribute (
Doctrine::ATTR_MODEL_LOADING,
Doctrine::MODEL_LOADING_CONSERVATIVE
);
$manager->setAttribute(Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true);
$dsn = $this->getOption('dsn');
$conn = Doctrine_Manager::connection($dsn, 'doctrine');
$conn->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true);
$conn->setCollate('utf8_unicode_ci');
$conn->setCharset('utf8');
$conn->setAttribute(Doctrine_Core::ATTR_AUTO_FREE_QUERY_OBJECTS, true );
Doctrine::loadModels(APPLICATION_PATH . '/models');
return $manager;
}
Doctrine模型存储在“application / models”
中然后在我的application / configs / application.ini中:
autoloadernamespaces[] = "Doctrine"
dsn = "mysql://your_login:your_pass@server_ip/database"
答案 1 :(得分:0)
我发现了问题!
你必须确保每个 x.php Doctrine_Record类都有一个关联的xTable.php Doctrine_Table类,否则记录加载会中断!