messageについて

ZF-Exでは出力されるメッセージの類を次のディレクトリ下に置いてあります。

  • application
    • messages
      • en
        • html_header
          • meta_description.ini
          • meta_description.ini
          • title.ini
        • code.ini
        • fields.ini
        • js.ini
        • lang.ini
      • ja
        • html_header
          • meta_description.ini
          • meta_description.ini
          • title.ini
        • code.ini
        • fields.ini
        • js.ini
        • lang.ini

 

message下のディレクトリは言語で、デフォルトではja(日本語)となっています。この他にen(英語)も用意してありますが、必要に応じて言語の追加ができるようになっています。params.iniにあるパラメータ「message_lang」がデフォルトの値を指定するもので、これを変更する事で異なるディレクトリ名に変更可能です。また、translate_enableを1にするとMy_Translateによりブラウザに応じて自動的に言語が選択されます。詳しくはMy_Translateの項目をご覧下さい。

/messages/(言語コード)/の直下のファイルは全てMy_Translateにより読み込まれます。このファイルの配置は一例で、必要に応じてファイル名の変更や追加をしていただいて構いません。なお、html_headerディレクトリ下のファイルはそれぞれ指定して読み込んでいるため、ファイル名を変更する事はできません。また、例外的にjs.iniは他の処理でファイル名を明示的に指定して利用するため、修正する時は注意をお願いします。

code.ini

code.iniはエラーメッセージやシステムコードのメッセージを記述する事を想定しています。

Validate.NotEmpty.IS_EMPTY = "%sが空欄です"
Validate.Int.NOT_INT = "%sが整数でありません"
...

Validate.で始まるものはバリデーションのエラーメッセージです。バリデーションでエラーが発生した時、ここの対応するメッセージが呼び出されます。

Code.DATA_NOT_FOUND = "データが見つかりませんでした"
...
Code.ADD_COMPLETE = "新規追加を実行しました";
...

Code.に書かれているものはシステムのメッセージです。コントローラ中で次のようにExceptionをスローする事で、エラー画面でこのメッセージを表示できます。

throw new Zend_Exception('DATA_NOT_FOUND');

エラーメッセージの他、何らかの処理に成功した際にそのメッセージを表示する事も想定しています。

サンプル中ではメッセージをflashMessengerにセットし、indexControllerに転送して転送先で表示するようになっています。追加処理が完了したあと、次のようにメッセージをセットします。

// 追加処理完了のメッセージ表示の例
$this->_helper->flashMessenger->addMessage("ADD_COMPLETE");
$this->_redirect($this->_url_helper->index(false) . '/');

その後、indexControllerの冒頭では次のようにしてメッセージをビューファイルにセットしています。

$msg = $this->_helper->flashMessenger->getMessages();
if(!empty($msg)){
    $this->view->success_message = $this->getCodeMessage($msg[0]);
}

fields.ini

fields.iniはモデルの各フィールドのフィールド名を記述する事を想定しています。

products.field.id = "ID"
products.field.category_id = "カテゴリ名"
products.field.name = "商品名"
products.field.describe = "商品説明"
...

fields.iniにはこの他にモデル中の、値がリストである項目の名前を記述する事を想定しています。例えば公開フラグやステータスなど、更新頻度が低く、値によって処理の切り替えが起こりうるものは外部のテーブルで項目を管理するよりもリストを固定化した方がよい場合があるため、そのような時に使用する事を想定しています。

例えばサンプルファイル中では、Model_Product(Productモデル)で公開フラグのオンオフのフィールドがあります。これの項目名をfields.ini中に次のように記述します。

products.const.IS_PUBLIC = "公開"
products.const.IS_NOT_PUBLIC = "非公開"

Model_Product中でこれらの項目を取得し、配列上にセットしています。Model_Product中では該当する処理は次の通りです。

protected $_public_list = array();
const IS_NOT_PUBLIC = '0';
const IS_PUBLIC = '1';

/**
 * コンストラクタ
 */
public function __construct(){
    parent::__construct();

    $list = new Zend_Config_Ini(MESSAGE_PATH . '/model_list.ini', 'products');
    $list = $list->toArray();
    $this->_public_list = $this->makeConstList(array('IS_NOT_PUBLIC', 'IS_PUBLIC'));
    $this->addEnumList('public_flg', array_keys($this->_public_list));
}

コンストラクタ上でメンバ変数の$_public_list内に公開フラグのリストをセットしています。makeConstListはappModel用のメソッドになります。また、この時にaddEnumListメソッドを呼び出し、バリデーションの条件としてパラメータのリストをセットしています。バリデーションの詳細についてはバリデーターについてをご覧ください。

js.ini

js.iniはjavascriptで使用するメッセージを管理するファイルです。ここに書かれたメッセージ情報はjavascriptにより、ブラウザで閲覧可能な形式で出力されます。詳しくはjsのmessageについての項目をご覧下さい。

lang.ini

lang.iniにはシステムで使用するためのメッセージは含まれていません。ビューファイルのみで使用するメッセージを入れる事を想定しており、メッセージのidの規則性もありません。

meta_description.ini

meta_description.iniはHTML中のメタ説明文で表示するメッセージについてのファイルです。詳しくはMy_Html_Headerの項目をご覧ください。

meta_keyword.ini

meta_keyword.iniはHTML中のメタキーワードで表示するメッセージについてのファイルです。詳しくはMy_Html_Headerの項目をご覧ください。

title.ini

title.iniはHTML中のタイトルで表示するメッセージについてのファイルです。詳しくはMy_Html_Headerの項目をご覧ください。

関連ページ

ブログ記事