(ページの作成:「==sfDoctrineRecordサブクラスのアクセッサオーバーライド == ===sfDoctrineRecord=== *Doctrine ORMはsymfonyプラグインとして組み込まれていて...」)
 
 
36行目: 36行目:
 
     }
 
     }
 
  }
 
  }
 +
 +
[[Category:PHP]]
 +
[[Category:symfony]]
 +
[[Category:Doctrine]]

2013年4月20日 (土) 22:49時点における最新版

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