CakePHP コントローラのメソッドをURLから実行させない
コントローラにアクション以外のメソッドを書かないのが一番いいのかもしれません。
ただ、どうしても書きたいという場合にはメソッド名にアンダーバー “_” を付けるとURLからアクセスできなくなります。
試しに posts_controller.php に _foo というメソッド名を作り /posts/_foo/ にアクセスしてみると
Private Method in PostsController
You are seeing this error because the private class method _foo should not be accessed directly.
とプライベートメソッドなのでアクセスできませんよというエラーメッセージが出力されました。
しかしこのメッセージってあまりよくないのではと思い、試しに DEBUG=0 とデバッグモードを本番環境用にしたところ、
Not found
The requested address posts/_foo/ was not found on this server.
となりました。やはり考えてますよねそれくらい。
ちなみにエラーメッセージは
/cake/libs/view/templates/errors/
にエラーの種類によって15のテンプレートが用意されています。
自分で Not found などのエラーを修正したい場合は
/cake/libs/view/templates/errors/error404.thtml
を
/app/views/errors/error404.thtml
にコピーして修正すればそちらのテンプレートが使用されます。
CakePHP の日本語マニュアルに書かれている
メンバ関数を protected にして見えるようにするには、コントローラアクション名を ‘-’ ではじめてください。(訳注:将来の仕様???)
メンバ関数を private にするためには、コントローラアクション名を ‘–’ ではじめてください。(訳注:将来の仕様???)
というのはこれのことなのかな?
ただ、”_” ではなく “-” になっている。(英語のマニュアルも同様に “-” でした。)
CakePHP 日本語マニュアル
C.4. コントローラ(Controllers)
CakePHP マニュアル(英語)
CakePHP Manual
関連する投稿
コメントをどうぞ
Additional comments powered by BackType