okomeworld

なんやかんやで白米が好き

アソシエーション先のモデルで使用しているビヘイビアのafterFindを動かす方法

デフォルトだと何故かビヘイビアでafterFind定義していても動いてくれない。
ちょっと不便だったので動くようにしてみました。

<?php
class AppModel extends Model
{
  function afterFind($results,$primary=false)
  {
    $results = parent::afterFind($results,$primary);
    if(!$primary) {
      $params = array($results,$primary);
      $options = array('modParams' => true);
      $results = $this->Behaviors->trigger($this,'afterFind',$params,$options);
    }
    return $results;
  }
}
?>

モデルクラスはBehaviorsCollectionモデルというのをプロパティに持っているようで
BehaviorCollectionモデルのtriggerメソッドは、指定したメソッドが使用しているビヘイビアにあれば
一気に呼び出してくれるもののようです。

triggerメソッドに関してはhttp://api.cakephp.org/で見てみれば大体の雰囲気はわかると思います。
とりあえず僕はこれで今のところ困ってません。

しかしなぜafterFindは動いてくれないんだろ。。
わざわざ第2引数にprimaryフラグがあるので何か理由があるのかもしれませんけど・・・。