PHP/Ethna

Ads

手順

デフォルトのphpやテンプレートやskelをUTF-8化する

ethna add-project で作成されたファイル類は EUC-JP で作成されるのでこれをUTF-8します。 日本語が含まれていないファイルもありますが、これもエディタで開いたときに文字コードがUTF-8で保存すべしと分かるように頭に適当な日本語も追加します。

以下のスクリプトをUTF-8で作成して実行すれば一発で完了です。

  • ethna-utf8.sh
    #!/bin/sh
    # for ethna-2.3
    find skel/ template/ -type f -name \*.tpl | xargs \
      perl -i -pe 's/EUC.JP/UTF-8/g; s/^<html>$/<html><!--あいうえお-->/'
    find app/ etc/ skel/ www/ -type f -name \*.php | xargs \
      perl -i -MEncode -pe'Encode::from_to($_, "EUC-JP", "UTF-8"); s/^<\?php$/<?php \/\/あいうえお/'

エラーメッセージのUTF-8化

エラーメッセージはEthnaのプログラムにべたで書いてあるので、自分のプロジェクトのテンプレートやphpを修正だけじゃ足りない。

Ethna 本体に手を入れないで修正する方法を考えてみたのが以下の通り。

  1. app/XXX_ActionError.php を作成
    <?php
    /**
     *  エラーメッセージをUTF-8にコンバートするラッパークラス
     */
    class XXX_ActionError extends Ethna_ActionError
    {
            /**
             *  エラーオブジェクトを生成/追加する
             *
             *  @access public
             *  @param  string  $name       エラーの発生したフォーム項目名(不要ならnull)
             *  @param  string  $message    エラーメッセージ
             *  @param  int     $code       エラーコード
             */
            function add($name, $message, $code = null)
            {
                    $message = mb_convert_encoding($message, 'UTF-8', 'UTF-8,EUC-JP');
                    parent::add($name, $message, $code);
            }
    
            /**
             *  Ethna_Errorオブジェクトを追加する
             *
             *  @access public
             *  @param  string              $name   エラーに対応するフォーム項目名(不要ならnull)
             *  @param  object  Ethna_Error $error  エラーオブジェクト
             */
            function addObject($name, &$error)
            {
                    $error->message = mb_convert_encoding($error->message, 'UTF-8', 'UTF-8,EUC-JP');
                    parent::addObject($name, $error);
            }
    }
    ?>
  2. app/XXX_Controller.php を修正
    • 上記 ActionError の拡張クラスの require を追加
      require_once 'XXX_ActionError.php';
    • $class['error'] を Ethna_ActionError から上記クラスに変更
      var $class = array(
           :   
        'error'         => 'XXX_ActionError',
           :
      );

未解決

  • __ethna_info__ や __ethna_unittest__ 等の組み込みアクションで利用されるテンプレートのUTF-8化はどうすればいいか?

日高@スタジオ・ポットSD より

私の環境(Ethna2.3.2/PHP5.1.6)では、バリデート部分がうまくうごかず、 /usr/share/pear/Ethna/class/Ethna_ActionError.phpの

/*
       if (func_num_args() > 3) {
           $userinfo = array_slice(func_get_args(), 3);
           $error =& Ethna::raiseNotice($message, $code, $userinfo);
       } else {
           $error =& Ethna::raiseNotice($message, $code);
       }
       $this->addObject($name, $error);
       return $error;
*/

部分をコメントアウトすることで問題を回避しました。(結局本体に手を入れてしまった……) もし、スマートな解決法があれば、ぜひ。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-11-02 (金) 13:56:45 (4341d)