sfDoctrineRecordサブクラスのアクセッサオーバーライド

sfDoctrineRecord

  • Doctrine ORMはsymfonyプラグインとして組み込まれていて、スキーマ定義から自動的にsfDoctrineRecordクラス定義が生成されます。
  • setter/getterはマジックメソッドによって実装されており、オーバーライドする場合は注意が必要です。


間違った記述例

  • MemberレコードのNameセッターにオリジナルの処理を追加したい場合、下記のように記述したくなりますが、この記述だと親クラスのsfDoctrineRecord内で再度 setName()を呼び出すため、ループしてしまいます。
<?php
class Member extends BaseMember
{
    public function setName($value)
    {
        parent::setName($value);
         
        /* オリジナルの処理 */
    }
}

正しく動作する記述例

  • sfDoctrineRecord::_set()メソッドを呼び出します。
<?php
class Member extends BaseMember
{
    public function setName($value)
    {
        parent::_set('name', $value);
        
        /* オリジナルの処理 */
    }
}

facebook slideshare rubygems github qiita