有没有办法使用PHP-ActiveRecord作为symfony的ORM /抽象层?

时间:2010-09-20 22:34:53

标签: php orm symfony1 symfony-1.4 database-abstraction

我很久以前就发现了PHP-ActiveRecord,经过近一个月的努力来编写自己的ORM(我很难做到这一点)并且我爱上了它。之前我曾看过Doctrine和Propel,但由于纯粹的复杂性和学习曲线,我决定逃跑。对于AR,我没有其他人的焦虑和学习困难。

此后不久,我还发现了symfony框架(在发现其他框架过于膨胀之后,我也试图从stratch创建自己的框架)。但是,我有一个问题:使用Doctrine和Propel作为开箱即用的ORM /抽象层的symfony框架,没有任何关于如何更改它的文档。

我还没有真正使用过symfony,我一直在阅读“温柔的介绍”一书。 ORM /抽象层似乎从symfony的核心稍微删除,似乎很容易转换所有内容。问题是......是吗?

有没有人有任何使用ActiveRecord和symfony的经验,甚至使用除了Doctrine / Propel和symfony以外的任何东西?

1 个答案:

答案 0 :(得分:3)

我会将ActiveRecord代码捆绑为Symfony插件。您可以阅读有关创建Symfony插件here的更多信息。基础是:

  • 创建plugins/sfActiveRecordPlugin文件夹。将活动记录代码放在plugins/sfActiveRecordPlugin/lib/vendor
  • sfActiveRecordPlugin/config/config.php内放置任何引导ActiveRecord需要的内容。每次实例化ProjectConfiguration时都会执行此代码。如果ActiveRecord拥有自己的自动加载器,您可能需要在此处解决此问题。您可能还需要将Symfony设置为忽略ActiveRecord类,这可以通过autoload.yml完成。
  • ProjectConfiguration课程中启用您的插件:

    class ProjectConfiguration extends sfProjectConfiguration
    {
      public function setup()
      {
        $this->enablePlugins(array(
          'sfActiveRecordPlugin',
        ));
      }
    }
    

    启用插件调用将禁用未明确启用的任何插件。如果您愿意,也可以使用不想加载的插件调用disablePlugins。

这应该是大部分工作。

最后,我会敦促你给Doctrine另一个镜头。 Doctrine是一个非常强大的ORM,IMO是最好的ORM。另外,Symfony附带了很多Doctrine特定的东西,你最终会重写一些。