time 2017/10/17
CakePHPでコントローラーのメソッドを『private』宣言や『protected』宣言したい場合は、メソッド名の前に『_(アンダーバー)』をつけることで実現できます。
(『private』や『protected』については、「PHP publicとかprivateとかの修飾子」参照。)
『private』なメソッドを作成したい場合は『__(アンダーバー2個)』。
『protected』なメソッドの場合は、『_(アンダーバー1個)』をメソッド名の前につけます。
こうする事で、自動的に『private』や『protected』メソッドとなります。
▼『private』『protected』メソッドの作成例
class TestsController extends Appcontroller { // これはpublic宣言になる function publicTest() { } // これはprivate宣言になる function __privateTest() { } // これはprotected宣言になる function _protectedTest() { } }
また、『private』や『protected』なメソッドには、アクションとしてアクセスできないようになります。
例えば、上記の例なら『http://ドメイン名/tests/__privateTest』としてアクセスしようとした場合、『Debug Level』が『1』以上なら『privateメソッドなのでアクセスできないよ!!』みたいなエラーページが表示。
『Debug Level』が『0』なら『そんなアクションはないよ!!』なエラーページが表示されます。
ちなみに、以下のようにしても『private』や『protected』なメソッドは作成できますが、『Debug Level』が『1』以上の場合『privateメソッドなのでアクセスできないよ!!』エラーページは表示されず、『アクションがみつからないよ!!』みたいなエラーページが表示されます。
(※CakePHPは「設定よりも規約」なので、『private』メソッドは『__』。『protected』メソッドには『_』をつけるべきだと思います。)
▼『_』をつけない場合
class TestsController extends Appcontroller { // これはpublic宣言になる public function publicTest() { } // これはprivate宣言になる private function privateTest() { } // これはprotected宣言になる protected function protectedTest() { } }
『private』も『__』も書いた場合は、『privateメソッドなのでアクセスできないよ!!』エラーだったので、両方書いても問題ないのかな??
情報おまちしております・・・