Как Zend Framework с Propel ORM - PullRequest
       25

Как Zend Framework с Propel ORM

9 голосов
/ 26 сентября 2010

Я бы хотел интегрировать Propel с Zend framework.Я видел интеграцию доктрины в прошлом, но в этом посте говорится, что кажется, что propel делается немного по-другому.

В Propel уже есть две вещи: перваяв том, что Propel включает в себя собственный автозагрузчик, то есть мне не нужно было пытаться принудительно Propel ввести в структуру файловой системы Zend Framework.Во-вторых, Propel предназначен для того, чтобы вы могли с легкостью размещать его файлы в любом месте, если вы правильно обновите include path.Это значительно упростило процесс, чем я думал.

Но пост не содержит подробностей о том, как его завершить.Я предполагаю, что мне нужно изменить Zend Bootstrap.php и application.ini (я использую последнюю Zend 1.10.8), но мне трудно найти сообщение о последней версии Zendс последней версией Propel.

Кто-нибудь может прокомментировать, как это сделать самым плавным способом?

другой вопрос: есть ли у Propel интерфейс командной строки или мне не нужен интерфейс командной строки для propel, если яиспользую интерфейс командной строки Zend?

Ответы [ 4 ]

11 голосов
/ 26 сентября 2010

Я не использую Propel за пределами Symfony, но из того, что я знаю о Propel, но я думаю, что что-то вроде следующего будет работать для вещей во время выполнения:

В вашем загрузчике

public function initPropel()
{
   require_once 'Propel.php';
   Propel::init($this->getOptions('propelConfig'));

   // so we can get the connection from the registry easily
   return Propel::getConnection();
}

В вашем application.xml (адаптируйтесь к ini, если это то, что вы предпочитаете)

<applicationConfiguration xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/">
  <production>
    <!-- other stuff -->
    <includePaths>
        <propelRuntime><zf:const zf:name="APPLICATION_PATH" />/../library/propel/runtime</propelRuntime>
    </includePaths>
    <propelConfig><zf:const zf:name="APPLICATION_PATH" />/configs/propel-runtime.php</propelConfig>
    <!-- other stuff -->
  </production>
</applicationConfiguration>

Конечно, это не совсем полная интеграция, насколько я имею в виду ... но этого должно быть достаточно, чтобы вы начали и работалибез особых хлопот.Если это стоит вложений для вас в этом проекте, я бы пошел вперед и создать ресурс приложения.Запустите сборку propel и посмотрите на скомпилированный массив php.Затем сопоставьте это с xml или ini и вставьте прямо в файл конфигурации вашего приложения.Затем измените ваш initPropel так, чтобы он обрабатывался следующим образом:

public function initPropel()
{
   require_once 'Propel.php';
   Propel::setConfiguration($this->getOptions('propelConfig'));
   Propel::initialize();

   // so we can get the connection from the registry easily
   return Propel::getConnection();
}

Если вы захотите, вы даже можете не загружать массив напрямую, как анализируется из файла конфигурации, а вместо этого создать объект PropelConfiguration и программно установить все вашипараметров, затем передайте их setConfiguration.

Что касается инструментов сборки, то я считаю, что интеграция с Zend_Tool - это тяжелое испытание, поэтому я склонен полагаться на phing или пользовательские сценарии оболочки для всего этого.Если вы не планируете использовать Propel во многих проектах, вероятно, не время реализовать этот уровень интеграции.Я сделал это с Doctrine 1.xa, а мне потребовалось пару недель, чтобы проработать все изгибы: -)

4 голосов
/ 26 сентября 2010
1 голос
/ 08 мая 2012

Просто попробуйте добавить init propel в файл index.php, но ДО того, как вы настроите процесс автозагрузки В этом случае Zend_Autoloader не может взаимодействовать с механизмом автозагрузки Propel. Для меня это работает нормально, но я не уверен, что это хороший дизайн ...)

1 голос
/ 23 февраля 2012

Я помещаю библиотеку Propel в «Ваш Zend_Project / library» с папкой Propel, в которой находится папка времени выполнения.

Затем я помещаю этот кусок кода в мой bootstrap.php.

protected function _initPropel()
{
   //require Propel Library
   require '../library/Propel/runtime/lib/Propel.php';

   //initialize Propel configuration
   Propel::init(APPLICATION_PATH . '/configs/orm-conf.php');

   //initialize Propel connection
   Propel::initialize();

   //return Propel Connection
   return Propel::getConnection();

}

Мои файлы конфигурации Propel находятся в «вашем Zend Project / application / configs»

Вам также нужно изменить файл index.php, чтобы он нашел сгенерированные вами модели ORM:

set_include_path (implode (PATH_SEPARATOR, массив (realpath (APPLICATION_PATH. '/../Library'), realpath (APPLICATION_PATH. '/ Models'), get_include_path (),)));

Вы помещаете свои модели в имя «Zend Project / application / Models / database», которое задается в вашем schema.xml свойством xml в теге «имя-базы-данных =« orm »».

...