Doctrineアクセサのオーバーライド
開発中、ブラウザが下記エラー表示をしてしばらく悩んだ。。
Proxy Error
apacheのerror.logを見ると
[notice] child pid 8942 exit signal Segmentation fault (11)
上記で調べてもなかなか糸口がつかめず。。。
他のVirtualHostのURLを確認したら正常に表示されている為、どうも自分の環境の問題らしい。
結局、問題はコードにあったようでした。
class Item extends BaseItem { public function getSalePrice() { // これだとNG return number_format(parent::getSalePrice()); // これもNG return number_format($this['sale_price']); // こうするとOK return number_format($this->_get('sale_price')); } }
NG例はループが発生するようです。
参考HP:
http://blog.asial.co.jp/493
【補足】
ちなみに、getXXX()をオーバーライドすると、$this['column']、$this->get('colomn')も影響を受ける
しかし、以下のようにした場合、$valueは元の値を返す
foreach ($obj as $value) { echo $value }
ただし、配列化するとオーバーライド後の値になる
foreach ($obj->toArray() as $value) { echo $value }
個別に元の値が欲しい場合は以下
$obj->rawGet('カラム'); //$obj->_get('カラム'); は不可(Unknown method) //model内なら$this->rawGet()でも$this->_get()でも同様