CakePHPのafterFilterで全てのビューファイルを置換する

CakePHP PHP アプリケーション別

広報:齊藤 メイ 広報:齊藤 メイ

Posted on 2016年11月16日(水)11:42


CakePHPのafterFilterで全てのビューファイルを置換する

CakePHPでWebアプリを作った後に追加要件として表示内容を差し替えて欲しいと言われた場合の最終手段です。本日は「CakePHPのafterFilterで全てのビューファイルを置換する」についてです。

こんにちは。猫ITソリューションズ広報の齊藤メイ(♀)です。本日は、「CakePHPのafterFilterで全てのビューファイルを置換する」についてです。

CakePHPは多くのWebアプリケーションで使われているPHPフレームワークです。先に書いた「差し替えて欲しい」というのも当然一括置換で通常なら楽勝で対応可能なのですが、状況によってはそう上手くいかない場合もあります。例えば全ページにおいて差し替えが必要で、全てのコントローラーに記述していてはリリースまでに時間がかかる、、、とかです。そもそも面倒くさいというもっと重大な問題もありますが。そんなときに便利なのが今回ご紹介するリクエストライフサイクルコールバック「afterFilter」です。なお今回使用するバージョンは1.2.7になります。

※1系と古いので注意してください。ただ最新の2系でもafterFilterは使えます。

リクエストライフサイクルコールバックとは

CakePHPのコントローラーにはリクエストのライフサイクル周り、つまりゆりかごから墓場までロジックを挿入できるコールバック関数がついています。その中の一つがafterFilter()です。全部で3つあります。
http://book.cakephp.org/2.0/ja/controllers.html#controller-life-cycle

  • Controller::beforeFilter()
    各アクションの前に実行される
  • Controller::beforeRender()
    アクションの後でビューが描画される前に呼ばれる
  • Controller::afterFilter()
    アクションの後で描画が完了した後に呼ばれる

今回は最後の最後、ブラウザーに表示される直前に置換したいのでafterFilterを使います。

サンプル

要件

では早速作ってみましょう。今回サンプルとして作るプラグインの要件と制約は以下の通りです。ちなみに過去記事「Smartyプリフィルタプラグインで全てのビューファイルを置換する」と全く同じです。

  • 全てのページの</body>タグの前にJavaScriptコードを埋め込みたい
  • JavaScriptコードは外部ファイル
  • 実プログラムには1ミリも手を加えられない

スーパークラスAppControllerを確認

コードはスーパークラスであるAppControllerに記述しますので、どこにあるかを確認しましょう。ここでは、
/cake/app/app_controller.php
とします。

JavaScript外部ファイルを用意する

要件ですので用意します。今回は、
/cake/app/webroot/js/test.js
とします。

コードを書く

それではコードを書くのですが、、、少し補足します。サンプルコードではafterFilter()の有効/無効は別ファイル/cake/app/config/bootstrap.phpに定数ANALYTICS_CAKEPHPとして設定しています。意味不明な定数名ですが、そこは華麗にスルーして適当に脳内置換した上で参考にしてください。

 

以上です。これで全てのビューファイル中の</body>タグがJavaScriptコード+</body>として置換されます。

CakePHPを使ったそれなりに規模が大きいプロジェクトにおいて全体的な修正をかけたい場合に便利です。しかし最初に書いたとおりで「最終手段」と猫ITソリューションズは考えています。出来ればこういう状況にならないようにしたいものですね。


いかがでしたでしょうか?
猫ITソリューションズは、飼い主の皆さんにITを活用しあらゆるシーンで的確なアドバイスをいたします。それではまたお会いしましょう。

CakePHPのafterFilterで全てのビューファイルを置換する

see you!

 



Blog Categories

Member Profile

広報:齊藤 メイ

埼玉在住の三毛猫です。趣味は日向ぼっこ、好きな猫缶はカツオ系です。仲良くしてくださいね!

Facebook
Twitter

代表:齊藤 智宏

埼玉在住のWebデベロッパーです。80's洋楽、映画、レトロゲームが大好きです。よろしく!

Facebook
Twitter