Я хотел бы интегрировать Propel
с Propel
Zend framework
. Я видел интеграцию доктрины в прошлом, но этот пост говорит, что кажется, что продвижение сделано немного по-другому.
У Propel уже есть две вещи: во-первых,
Propel
включает в себя собственный автозагрузчик, что означает, что мне не пришлось пытаться заставитьPropel
вZend Framework
файловой системыZend Framework
. Во-вторых,Propel
разработан, чтобы вы могли легко помещать файлы в любом месте, если вы правильно обновляете свойinclude path
. Это значительно облегчило процесс, чем я думал.
Но сообщение не вникает в полную информацию о том, как закончить его. Я предполагаю, что мне нужно изменить Zend
Bootstrap.php
и application.ini
(я использую последний Zend 1.10.8
), но мне трудно найти сообщение о последней версии Zend
с последним версия Propel
.
Кто-нибудь может прокомментировать, как это сделать самым плавным образом?
другой вопрос: имеет ли Propel
интерфейс командной строки или мне не нужен интерфейс командной строки для propel, если я использую интерфейс командной строки Zend
?
Я не использую 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>
Конечно, это действительно не полная интеграция, насколько мне известно … но этого должно быть достаточно, чтобы вы могли работать без особых хлопот. Если это будет стоить вам инвестиций в этот проект, я бы пошел дальше и сделаю Application Resource. Запустите сборку 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, пока я вернулся, и мне потребовалось пару недель, чтобы работать со всеми изломами 🙂
Ты пробовал
Я помещаю библиотеку Propel в «Your 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 находятся в «Your 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 в теге «database name =» orm ».
Просто попробуйте добавить init propel в файл index.php, но ПЕРЕД настройкой автозагрузки. В этом случае Zend_Autoloader не может взаимодействовать с механизмом автозагрузки Propel. Для меня это нормально работает, но я не уверен, что это хороший дизайн …)