Мне интересно использовать Doctrine как ORM для нового приложения Zend Framework, которое я пишу. Я пытаюсь понять, как лучше всего интегрировать его как можно более прямолинейно. Каждый пример, который я нахожу, отличается, и многие из них предваряют новые функции автозагрузки в ZF 1.8. Никто из них не работал для меня.
У кого-нибудь есть хороший способ сделать это? Я склонен захотеть поместить его в свой загрузочный файл, но некоторые люди предлагают создать плагин Zend_Application_Resource. Жесткая часть, похоже, правильно загружает пути загрузки как для пространства имен Doctrine, так и для классов моделей, которые по умолчанию не соответствуют соглашению о автоматической загрузке Zend.
Есть предположения? Благодарю.
Я написал Resource Bootstrapper для Doctrine и Zend Framework несколько недель назад и превратил все это в небольшую оболочку, потому что я думаю, что ZF и Doctrine – отличная команда. Вы можете прочитать статью здесь: http://coffeecoders.de/2009/06/using-the-zend-framework-18-bootstrapper-and-doctrine-110/
Он полностью настраивается с помощью конфигураций ресурсов Bootstrap (пример также включен). К сожалению, Doctrine ищет модели в папке модели с тем же именем класса, что и имя файла (что не соответствует схеме именования ZF), поэтому на самом деле невозможно избавиться от регистрации автозагрузчика Doctrine. Ресурс Loader выглядит так:
<?php /** * Doctrine model loading bootstrap resource. Options must provide a connection string. * directory option for model directory is optional (default is ./models). * Further options will be set for the Doctrine manager via setAttribute (eg model_loading). * @author daff */ class Cuckoo_Application_Resource_Model extends Zend_Application_Resource_ResourceAbstract { public function init() { $manager = Doctrine_Manager::getInstance(); $options = $this->getOptions(); foreach($options as $key => $value) { if($key != 'connection' && $key != 'directory') $manager->setAttribute($key, $value); } if(empty($options['connection'])) throw new Exception("No database connection string provided!"); Doctrine_Manager::connection($options['connection']); if(empty($options['directory'])) $dir = './models'; else $dir = $options['directory']; Doctrine::loadModels(realpath($dir)); return $manager; } }
взгляните на этот пост. Он дает подробное объяснение, структуру каталогов и способы использования функций автозагрузки.
Что касается автозагрузки, вы можете довольно эффективно использовать загрузчик Doctrine с новым стеком Zend_Loader_Autoloader. Взгляните на эту страницу , особенно там, где упоминается метод pushAutoloader ().
Вот основной прогон:
$autoloader = Zend_Loader_Autoloader->getInstance(); $autoloader->pushAutoloader(array('Doctrine', 'autoload'), 'Doctrine');
Это будет использовать собственный автозагрузчик Doctrine только для классов, начинающихся с Doctrine, если они еще не найдены другими автозагрузчиками в стеке.
Надеюсь это немного поможет.