2012-05-29 2 views
0

Я работаю с классами Doctrine_Record, которые автоматически загружаются автоматически; но после некоторого чтения я решил, что хотел бы реализовать как Doctrine_Records, так и Custom Table Classes.Zend: автозагрузка как Doctrine_Table, так и Doctrine_Record

Так что я добавил это к моему бутстрапу

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

Который сделал пользовательские таблицы классов работают просто отлично ... но это ломает самозарядные отчеты!

Как сделать автозагрузку?

I.E. новый User.php получает мой класс пользователя Doctrine_Record и Doctrine_Core :: getTable («Пользователь») получает мой пользовательский класс 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; 

Большая часть моего приложения в настоящее время работает вокруг этого и не будет меняться в этом отношении.

Однако, я хотел бы ТАКЖЕ использование Custom Tables

class UserTable extends Doctrine_Table {} 

$bar = Doctrine_Core::getTable('User'); 

Но, как только я включаю это (классы пользовательских таблиц) функции для вызова классов Doctrine_Table, использующие суффикс таблицы. Любые классы Doctrine_Record, которые я ранее расширил и вызвал напрямую, перестает работать! Я хочу использовать оба!

ответ

0

Я нашел проблему!

Вы должны убедиться, что каждый x.php Класс Doctrine_Record имеет связанный с ним класс xTable.php Doctrine_Table или загрузка записи будет нарушена!

0

Я действительно не понимаю вашу проблему с вашими пользовательскими классами, но в любом случае это мой загрузочный файл для Doctrine 1.2.4 в ZF, используя mysql и UTF-8. Для этого не требуется 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.ini:

autoloadernamespaces[] = "Doctrine" 
dsn = "mysql://your_login:[email protected]_ip/database" 
+0

См. Мое редактирование, я пытаюсь выполнить как пользовательские классы, так и пользовательские таблицы. Мои пользовательские классы уже работают нормально. –

Смежные вопросы