Есть ли способ использовать PHP-ActiveRecord как слой ORM / абстракции Symfony?
Я только что обнаружил PHP-ActiveRecord не так давно, после того как в течение почти месяца пытался написать свой собственный ORM (у меня такой жесткий ум), и я влюбился в него. Я раньше смотрел на Доктрину и Пропел, но решил убежать из-за явной сложности и кривой обучения. С AR у меня нет беспокойства и трудностей с обучением, которые у меня были с другими.
Вскоре после этого я также обнаружил фреймворк Symfony (я также пытался создать свой собственный фреймворк с нуля после того, как обнаружил, что другие фреймворки слишком раздуты). Однако у меня есть одна проблема: инфраструктура Symfony, использующая Doctrine и Propel в качестве слоя ORM/ абстракции без каких-либо документов о том, как его изменить.
На самом деле я еще не использовал Symfony, я читал книгу "Нежное введение". Уровень ORM/ абстракции, кажется, несколько удален от ядра Symfony и , по-видимому, достаточно прост, чтобы все преобразовать. Вопрос в том... это?
У кого-нибудь есть опыт использования ActiveRecord с Symfony или даже использования чего-либо кроме Doctrine/Propel с Symfony?
1 ответ
Я бы связал код ActiveRecord как плагин Symfony. Подробнее о создании плагинов Symfony вы можете прочитать здесь. Основы будут:
- Создать
plugins/sfActiveRecordPlugin
папка. Поместите код активной записи вplugins/sfActiveRecordPlugin/lib/vendor
, - Поместите все, что нужно ActiveRecord для начальной загрузки
sfActiveRecordPlugin/config/config.php
, Этот код будет выполняться каждый раз, когда создается экземпляр ProjectConfiguration. Если у ActiveRecord есть собственный автозагрузчик, вам, вероятно, придется решить эту проблему здесь. Вам также может понадобиться настроить Symfony на игнорирование классов ActiveRecord, это делается с помощьюautoload.yml
, Включите ваш плагин в вашем
ProjectConfiguration
учебный класс:class ProjectConfiguration extends sfProjectConfiguration { public function setup() { $this->enablePlugins(array( 'sfActiveRecordPlugin', )); } }
Вызов enable plugins отключит все плагины, которые явно не включены. Вы также можете вызвать disablePlugins с плагинами, которые вы не хотите загружать, если хотите.
Это должно быть большая часть работы.
Наконец, я призываю вас дать Доктрине еще один шанс. Doctrine - это очень мощный ORM, а IMO - лучший. Кроме того, Symfony поставляется с множеством специфических для Doctrine вещей, которые вы собираетесь переписать хотя бы частично.