ようやくUTF8での運用に慣れたきがするので、どうやってUTF-8を使っているのか紹介。
EthnaでUTF-8なWebアプリを作る場合、templateをすべてUTF-8で書いてやればいいわけですが、ActionFormのValidateなどで表示されるEthna内部に書かれているエラーメッセージがEUC-JPの為、エラーメッセージが文字化けしてしまいます。
今までは、Ethna全体や、エラーメッセージが書かれたファイルをUTF-8化してみたりしていましたが、結構面倒です。(ちょっと力技過ぎる)
そこで、エラーメッセージを表示するメソッドを継承して文字コード変換を行います。
以下のコード(Ethna_ActionError_UTF8.php)をコントローラーの設定を変更してActionErrorと置き換えるだけです。
_getActionForm();
$form_name = $af->getName($error['name']);
$result = str_replace("{form}", $form_name, $error['object']->getMessage());
return mb_convert_encoding($result, 'UTF-8', 'EUC-JP');
}
}
?>
これを使うようにすると、ソースコードの文字コード変換と比べて何が楽かっていうと、ae->addでエラーを追加すれば、EUC-JPのままActionから日本語でエラーメッセージが送れるわけです。
便利ですよね。と思ったけどみんなActionError全然使ってない気がしてきたので続き書くのやめる。いや、ae->add使うと、templateのerrorsに入るしis_errorで検出できるので例えばerror.tplってのを用意しておいて、ae->addしたらerror.tplへ飛ばすようにすると、どのActionでも同じテンプレでエラー表示画面が作れて手間が省けてラッキーとかそんなんです。