CakePHP のヘルパー設定で嵌った件

CakePHP 1.3で作られたウェブサービスをメンテナンスしてるのですが、先日ヘルパー部分でハマってしまったのでメモかねてエントリ。

まず前提として、cake/libs/controller/controller.php__mergeVars() を見ると分かるのですが、CakePHP はヘルパーとかを AppController と現在のコントローラーのプロパティをマージして使ってます。

なので例えば以下のように書けば Hoge と Fuga の2つのヘルパーが読み込まれます。

1
2
3
4
5
6
7
8
9
<?php

class PostsController extends AppController {
    var $helpers = array('Hoge');
}

class AppController extends Controller {
    var $helpers = array('Fuga');
}

で、ここで私が1つ勘違いしていたことがあって、私は AppController に書いたやつと現在のコントローラーに書いたやつ「だけ」が読み込まれると思っていました。
以下のように AppController に helpers プロパティがなかったら Hoge の1つだけが読み込まれると思っていたわけです。

1
2
3
4
5
6
7
8
<?php

class PostsController extends AppController {
    var $helpers = array('Hoge');
}

class AppController extends Controller {
}

しかし、実際は AppController の親クラスである Controller の helpers プロパティでいくつか設定されてるので、 Hoge, Session, Html, Form の4つのヘルパーが読み込まれるんですね。
これを知らなくて、 AppController に Fuga とだけ書いて暫く嵌ってしまいましたとさ。ちゃんちゃん。

Comments