0

我刚刚发现 PHP-ActiveRecord 不久前,在努力编写自己的 ORM 近一个月后(我就是那样头脑清醒),我爱上了它。我以前看过 Doctrine and Propel,但由于其复杂性和学习曲线,我决定离开。有了 AR,我就没有和其他人一样的焦虑和学习困难了。

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

我还没有真正使用过symfony,我一直在阅读“温和介绍”一书。ORM/抽象层似乎从 symfony 的核心中移除了,并且似乎很容易转换所有内容。问题是……是吗?

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

4

1 回答 1

3

我会将 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 一次机会。Doctrine 是一个非常强大的 ORM,而 IMO 是最好的。此外,Symfony 附带了许多特定于 Doctrine 的东西,你最终至少要重写其中一些。

于 2010-09-20T22:56:15.097 回答