FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CakePHPのビヘイビアの関数の引数でハマる件

  • 2012/03/24 21:58
  • Category: CakePHP
CakePHPではM(Model)V(View)C(Controller)それぞれで共通関数の置き場を持っている。Viewではelements, Controllerではcomponents, そしてModelではBehavior。ただしそれぞれの呼び出しは癖が異なる。特にModelにおけるBehaviorは困る。CakePHP的記法だと、Model内で$behaviors = array('なんとか')でよさそうに思うがさにあらず。$actsAs = ('Nantoka')でなくてはならない。ついでにactAsではなく、actsAsとsをつけるのを忘れがち。これを忘れると、Modelを未定義関数で呼ぶことになり、それって$this->query('その関数名')と等価に評価されるので、SQLエラーとなる。やだよこの仕様。

今日はさらに加えてハマった。ビヘイビア内で関数を作る際、Model内から直接呼ばれる場合、第1引数には必ず呼び元Modelのインスタンスが入ってくる。なので、

class HogeBehavior extends ModelBehavior {
function getHoge($aaa, $bbb) {
return $aaa;
}
}

てなビヘイビアと関数がある場合、Modelから

echo $this->getHoge(111,2222);

とか呼び出すと、てっきり「111」って表示されそうだけど、Warning (4096): Object of class Nantoka could not be converted to stringと怒られる。オブジェクトを文字列に変換できませんよ~と言っているのね。つまり$aaaにModelのインスタンス入ってしまっているのですね。なので、ビヘイビアの関数の第1引数では呼び出し元Modelのオブジェクトを受けてあげないといけません。さっきの例なら以下の通り。

class HogeBehavior extends ModelBehavior {
function getHoge($obj, $aaa, $bbb) {
return $aaa;
}
}

Pagination

Trackback

Trackback URL

http://muurimemo.blog.fc2.com/tb.php/15-a86bdb04

Comment

Post Your Comment

コメント:登録フォーム
公開設定

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。