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);
/* オリジナルの処理 */
}
}