Есть ли способ использовать 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 вещей, которые вы собираетесь переписать хотя бы частично.

Другие вопросы по тегам