Есть ли способ использовать PHP-ActiveRecord как слой ORM / абстракции Symfony? - PullRequest
0 голосов
/ 21 сентября 2010

Я только что обнаружил PHP-ActiveRecord не так давно, после того, как в течение почти месяца пытался написать свой собственный ORM (у меня такой жесткий ум), и я влюбился в него. Я раньше смотрел на Doctrine и Propel, но решил убежать из-за явной сложности и кривой обучения. С АР у меня нет проблем с обучением и тревогой, с которыми я столкнулся.

Вскоре после этого я также обнаружил фреймворк Symfony (я также пытался создать свой собственный фреймворк с нуля после того, как обнаружил, что другие фреймворки чрезмерно раздуты). Однако у меня есть одна проблема: инфраструктура Symfony, использующая Doctrine и Propel в качестве слоя ORM / абстракции из коробки без какой-либо документации о том, как его изменить.

На самом деле я еще не использовал symfony, я читал книгу "Нежное введение". Слой ORM / абстракции кажется несколько удаленным от ядра symfony, а кажется достаточно простым, чтобы все преобразовать. Вопрос в том ... это?

Есть ли у кого-нибудь опыт использования ActiveRecord с Symfony или даже использования чего-либо кроме Doctrine / Propel с Symfony?

1 Ответ

3 голосов
/ 21 сентября 2010

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

...