0

我一直在使用自动加载的 Doctrine_Record 类一段时间;但经过一番阅读,我决定我想同时实现 Doctrine_Records 和自定义表类。

所以我把这个添加到我的引导程序中

    $manager->setAttribute(
        Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES,
        true
    );

这使得自定义表类工作得很好......但它打破了自动加载记录!

如何使两者都自动加载?

IE new User.php 获取我的 User Doctrine_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');

但是,一旦我启用此(自定义表类)功能,就可以使用 Table 后缀调用 Doctrine_Table 类。我之前扩展并直接调用的任何 Doctrine_Record 类都停止工作!我想两者都用!

4

2 回答 2

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;
}

教义模型存储在“应用程序/模型”中

然后在我的 application/configs/application.ini :

autoloadernamespaces[] = "Doctrine"
dsn = "mysql://your_login:your_pass@server_ip/database"
于 2012-05-29T09:19:49.830 回答
0

我发现了问题!

您必须确保每个x.php Doctrine_Record 类都有一个关联的 xTable.php Doctrine_Table 类,否则记录加载将中断!

于 2012-05-30T01:30:32.803 回答