読者です 読者をやめる 読者になる 読者になる

帰ってきたHolyGrailとHoryGrailの区別がつかない日記

はてなブログに帰って来ました

【解決済み】componentのclass上のcall_user_funcで呼び出される関数の定義場所が分からない

例えば

  • controllers/sample_controller.php
class SampleController extends AppController {
  var $components = array('Sample');

  function sample() {
    $this->Sample->func('callback');
  }
}
  • controllers/components/sample.php
class SampleComponent extends Object {

  function func($call) {
    call_user_func($call);
  }

}

とあったときに
callback関数をどこに定義するのがいいのかがよく分からない

sample_controllerのclassで定義されているとエラーが発生して
sample.phpのclass外で定義すると動作はするけどなんか美しくないしmodelと連携できない

なんか見落としてる気がするけど今日1日これで時間つぶしてしまった。

追記
解決した。

controllerにfunction callbackを用意しておいてcall_user_funcに$thisを渡せば問題なく動いた

function callback() {
}

function sample() {
  $this->Sample->func(array($this, 'callback'));
}

これでOK

参考リンク

IRCで回答してくれたかたありがとうございました!