【symfony1.0】sfGuardUserなどのクラスをlib/model以下で使えるようにした記録【sfGuardPlugin】

とっても久々にかきます!

さて今日はsymfony1.0系でsfGuardPluginのsfGuardUserなどのクラスにメソッドを作成する際に、
pluginsフォルダ以下にあるクラスに直接かかなくてもよくなる素敵な方法についてまとめてみました。

参考サイト
http://groups.google.com/group/symfony-devs/browse_thread/thread/f65bcf36e233234f

参考サイトは英語です^^日本語でかかれてるところってあるのでしょうか。。
ちなみに参考サイトや、詳しい説明については、会社の先輩に教えてもらいました!感謝です!m(_ _)m


とりあえず方法は2通りあるそうです。

  1. その1getOMClass()をオーバーライドする
  2. その2敬称元(PluginsfGuardUser.php )をコピーする

以下から方法の詳細になります。

前準備

以下の設定をします。

/config/propel.ini

propel.builder.addIncludes = false

普段はfalseなはずなのですが、ここがtrueになっていると、うまくいきません。

その1 getOMClass()をオーバーライド

・ファイルの配置

まずpluginsフォルダ何にあるsfGuardUser.phpとsfGuardUserPeer.phpをコピペして、lib/model以下に設置します。

一応これだけでPeerのクラスは使えるらしいです。
理由は、symfonyさんがpluginsよりlib/modelをひいきしてきるからだそうです。
lib/model以下の方が優先度が高いため、参照先がそちらになります。

・getOMClass()をオーバーライドする

Peerクラスはsymfonyさんのひいきのおかげで使えるようになりましたが、
Peerじゃない方はpropelさんのわがままによりsymfonyさんの手にはおえません。
そこでBasesfGuardUserPeerクラスの中にあるgetOMClass()メソッドを書き換えて、propelさんを説得します。

先程作ったlib/modl以下のsfGuardUserPeer.phpに以下を追記します。

  public static function getOMClass()
  {
    return 'lib.model.sfGuardUser';
  }

これは何をしているかというと、
参照先のファイル(クラス)を指定しています。
「.」の部分が/となる感じで、ファルのパスみたいになっています。
元々はBasesfGuardUserPeer内にあるCLASS_DEFAULTを参照するようになっています。
CLASS_DEFAULTの内容はplugins以下のsfGuardUserとなっています。

こうしてpropelさんを説得してあげることによって無事lib/model内でsfGuardUser.phpのクラスが使えるようになりました!
これでprugins内のクラスに直に書かずにすみます。はっぴーですね。

その2 敬称元(PluginsfGuardUser.php )をコピーする。

これはそのままです。
でもこの方法だと、バージョンアップとか際に、再度コピーの手間があるので注意が必要です。


というわけで私は1の方法ではっぴーになりました。
同じようなことをしたい人の参考になればと思いますm(_ _)m