PHP-ActiveRecord を symfony の ORM/抽象化レイヤーとして使用する方法はありますか?
-
04-10-2019 - |
質問
私はつい最近、独自の ORM を書くのに 1 か月近く苦労した後 (私は頭が固いので) PHP-ActiveRecord を発見し、すっかりその虜になりました。私は以前に Doctrine と Propel を検討したことがありましたが、あまりの複雑さと学習曲線のため、逃げることにしました。AR を使用すると、他の人たちにあったような不安や学習の困難がなくなりました。
その後すぐに、symfony フレームワークも発見しました (他のフレームワークが肥大化していることに気づいた後、stratch から独自のフレームワークを作成しようとしていました)。ただし、問題が 1 つあります。symfony フレームワークは、すぐに使える ORM/抽象化レイヤーとして Doctrine と Propel を使用しており、変更方法に関するドキュメントはありません。
私はまだ実際に symfony を使用したことがなく、「Gentle Introduction」という本を読んでいます。ORM/抽象化レイヤー らしい symfony の中核からは少し離れていますが、 らしい すべてを簡単に変換できるようにします。質問は...それは...ですか?
symfony で ActiveRecord を使用した経験、あるいは symfony で Doctrine/Propel 以外のものを使用した経験のある人はいますか?
解決
ActiveRecord コードを Symfony プラグインとしてバンドルします。Symfony プラグインの作成について詳しく読むことができます。 ここ. 。基本は次のとおりです。
- を作成します
plugins/sfActiveRecordPlugin
フォルダ。アクティブなレコードのコードを入力しますplugins/sfActiveRecordPlugin/lib/vendor
. - ActiveRecord のブートストラップに必要なものをすべて内部に配置します
sfActiveRecordPlugin/config/config.php
. 。このコードは、ProjectConfiguration がインスタンス化されるたびに実行されます。ActiveRecord に独自のオートローダーがある場合は、おそらくここでそれを解決する必要があります。ActiveRecord クラスを無視するように Symfony を設定する必要がある場合もあります。これは、autoload.yml
. プラグインを有効にします
ProjectConfiguration
クラス:class ProjectConfiguration extends sfProjectConfiguration { public function setup() { $this->enablePlugins(array( 'sfActiveRecordPlugin', )); } }
Enable plugins 呼び出しは、明示的に有効になっていないプラグインを無効にします。必要に応じて、ロードしたくないプラグインを指定して disablePlugins を呼び出すこともできます。
それが作業のほとんどであるはずです。
最後に、Doctrine にもう一度挑戦してみてください。Doctrine は非常に強力な ORM であり、IMO はその中で最高のものです。さらに、Symfony には、少なくとも一部を書き直すことになる Doctrine 固有のものが多数付属しています。