FuelPHPの出力の変換の方法です。セキュリティ絡みでなくて、コード変換とかのお話。
FuelPHPはデフォルトならば、出力項目がフィルタリングされます。Securityクラスのhtmlentities()ですが、実体はPHPのhtmlentities()とのこと。
こうしたお話とは別で、携帯に出力するから、コード変換したいという時の、フィルタリングです。
当サイトでは、まだ具体的な方法を書いていなかったので、ご紹介します。例として、一番要求がありそうな、UTF8からShiftJisへの変換です。
まずは元となるBaseコントローラーを作成しましょう。
<?php
class Controller_Base extends Controller
{
public function after($response)
{
// return parent::after($response);
return parent::after(mb_convert_encoding($response, 'SJIS', 'UTF-8'));
}
}
後は、これを継承したコントローラーで、通常と同様に returnで出力したいものを、指定します。
<?php
class Controller_Popcorn extends Controller_Base
{
public function action_index()
{
return View::forge('popcorn');
}
}
単純ですね。ビューのpopcorn.phpは紹介しません。適当に作成してください。
コントローラーは各アクションの最後に、出力内容としてstringかView、Viewmodel、Parserクラスをreturnするお約束になっています。
その内容は$responsとして、after()関数に渡ってきます。ちなみに、after()はコントローラーが終了した時点で、FuelPHPから呼び出される関数です。
View、Viewmodel、Parserは__toString()を用意するお約束になっています。ですから、フィルターの中で使用すると、出力文字列がフィルターに流され、フィルターの結果は、文字列でしょうが、$responsは文字列でも当然OKですから、問題なく動作します。
このコードを全コントローラークラスに入れるのは面倒ですので、元となるクラスを作成し、そこに記述します。後は、コントローラークラスでBaseを継承すれば、前出力がShiftJisへ変換されます。
もちろん、この例のように$responseを直接フィルタリングした結果をreturnする必要はなく、 if文で切り分け、必要に応じてしたり、しなかったり、フィルターの種類を変更したり出来ます。
| FuelPHP、MVCと自動生成とテンプレートと< 前 | 次 >FeulPHP公式フォーラムが、一ヶ月以上前にロールバックされている様子 |
|---|
| < 前 | 次 > |
|---|