Интеграция Doctrine с приложением Zend Framework 1.8 - PullRequest
4 голосов
/ 10 июня 2009

Мне интересно использовать Doctrine в качестве ORM для нового приложения Zend Framework, которое я пишу. Я пытаюсь найти лучший способ интегрировать его как можно проще. Каждый пример, который я нахожу, отличается, и многие из них предшествуют новым функциям автозагрузки в ZF 1.8. Никто из них еще не работал для меня.

У кого-нибудь есть хороший способ сделать это? Я склонен разместить его в моем файле начальной загрузки, но некоторые люди предлагают создать плагин Zend_Application_Resource. Похоже, сложная часть заключается в том, чтобы пути загрузки работали правильно как для пространства имен Doctrine, так и для классов моделей, которые по умолчанию не соответствуют соглашению о автоматической загрузке Zend.

Есть мысли? Спасибо.

Ответы [ 3 ]

3 голосов
/ 10 июня 2009

Несколько недель назад я написал 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. Загрузчик ресурсов выглядит так:

<?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 (e.g. 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;
    }
}
1 голос
/ 06 ноября 2009

http://weierophinney.net/matthew/archives/220-Autoloading-Doctrine-and-Doctrine-entities-from-Zend-Framework.html

взгляните на этот пост. Он дает подробное объяснение, структуру каталогов и как использовать функции автозагрузки.

0 голосов
/ 10 июня 2009

Что касается автоматической загрузки, вы можете довольно легко использовать загрузчик Doctrine с новым стеком Zend_Loader_Autoloader. Взгляните на эту страницу , особенно там, где упоминается метод pushAutoloader ().

Вот базовый вариант:

$autoloader = Zend_Loader_Autoloader->getInstance();
$autoloader->pushAutoloader(array('Doctrine', 'autoload'), 'Doctrine');

При этом будет использоваться собственный автозагрузчик Doctrine только для классов, начинающихся с Doctrine, если они еще не найдены другими автозагрузчиками в стеке.

Надеюсь, это немного поможет.

...