ActionFromからtemplateを生成するプラグイン(β)
しばらくご無沙汰してました。
で、いきなり本題ですが、ActionFromを定義したら、templateファイルくらいは自動で生成してほしいと思いませんか?
そんなものぐさなあなたに送るプラグインです:)
以下ではプラグインをインストールした場合の動作について説明します。
プラグインのダウンロード先とインストール方法は最後に記載してます。
素のEthnaの挙動では無いので勘違いしないようにしてください。
概要
このプラグインを導入すると、ActionFormに定義した内容でtemplateファイルを出力することができるようになります。
使い方
1. actionの作成
例として、ユーザがプロフィールを入力する画面を想定します。入力項目は「姓」「名」「ニックネーム」「性別」にします。
まずはいつも通りの手順でアクションを作成します。
ethna add-action profile_add ethna add-action profile_add_do
user_addがフォームを表示するactionで、user_add_doが入力値を受け取るactionになることを想定しています。
2. ActionFormの編集。
いつも通りの手順でuser_add_doを編集して、フォームから受け取る値を定義します。
ここでは以下のようなActionFormを定義します。
<?php class APPID_Form_ProfileAddDo extends APPID_ActionForm { var $form = array( 'lastname' => array( 'name' => '姓', 'required' => true, 'type' => VAR_TYPE_STRING, 'form_type' => FORM_TYPE_TEXT, ), 'firstname' => array( 'name' => '名', 'required' => true, 'type' => VAR_TYPE_STRING, 'form_type' => FORM_TYPE_TEXT ), 'nickname' => array( 'name' => 'ニックネーム', 'required' => true, 'type' => VAR_TYPE_STRING, 'form_type' => FORM_TYPE_TEXT, ), 'sex' => array( 'name' => '性別', 'required' => true, 'type' => VAR_TYPE_INT, 'form_type' => FORM_TYPE_RADIO, 'option' => array(1 => '男', 2 => '女'), ), ); } class APPID_Action_ProfileAddDo extends APPID_ActionClass { function prepare() { if ($this->af->validate() > 0) { return 'profile_add'; } return null; } } ?>
3. プラグインの実行
これでプラグインを実行する準備は完了しました。templateファイルを自動で生成する為に以下のコマンドを実行してください。
第一引数はプラグイン名、第二引数がターゲットとなるテンプレート名、第三引数が先ほど作成したActionFormのアクション名になります。
ethna build-form profile_add_do profile_add
以上で完了です。
4. 動作確認
ブラウザからprofile_addにアクセスすると、以下の画面が表示されます。これはプラグインによって自動生成されたページです。
バリデーションでエラーが発生した場合は、以下の画面が表示されます。
で、何が起きたの?
このプラグインを実行すると、user_add_doのActionFormに設定された内容で、user_addのtemplateを出力します。
出力されたテンプレートファイルは以下の様になります(抜粋)
<body> <h1>profile_add</h1> <div class="buildform"> {if count($errors)} <div class="errors"> <p><em>Oops... the following errors were encountered:</em></p> <ul> {foreach from=$errors item=error} <li>{$error}</li> {/foreach} </ul> </div> {/if} {form ethna_action="profile_add_do"} <fieldset> <legend>profile_add_do</legend> <div class="row"> {if is_error('lastname')} <label for="lastname" class="error key">{form_name name="lastname"}<em>*</em></label> {form_input name="lastname" id="lastname" class="error"} {else} <label for="lastname" class="key">{form_name name="lastname"}<em>*</em></label> {form_input name="lastname" id="lastname"} {/if} </div> <div class="row"> {if is_error('firstname')} <label for="firstname" class="error key">{form_name name="firstname"}<em>*</em></label> {form_input name="firstname" id="firstname" class="error"} {else} <label for="firstname" class="key">{form_name name="firstname"}<em>*</em></label> {form_input name="firstname" id="firstname"} {/if} </div> <div class="row"> {if is_error('nickname')} <label for="nickname" class="error key">{form_name name="nickname"}<em>*</em></label> {form_input name="nickname" id="nickname" class="error"} {else} <label for="nickname" class="key">{form_name name="nickname"}<em>*</em></label> {form_input name="nickname" id="nickname"} {/if} </div> <div class="row"> {if is_error('sex')} <label for="sex" class="error key">{form_name name="sex"}<em>*</em></label> {form_input name="sex" id="sex" class="error"} {else} <label for="sex" class="key">{form_name name="sex"}<em>*</em></label> {form_input name="sex" id="sex"} {/if} </div> <div class="buttonrow"> {form_submit value="OK"} </div> </fieldset> {/form} </div> </body>
スケルトンファイルを編集するには
phpテンプレートなので、phpで記述してください。skelファイル名はbuild.form.tplです。
テンプレート内では以下の値が使用できます。
$form | ActionFormの内容(array)中身はvar_dump()してください:) | $macro | 内部値(array)中身は(以下略 |
ダウンロード | Ethna_Plubin_BuildForm-0.0.tzg |
既知のバグ
- 引数のアクション名・テンプレート名が複数指定できてしまいます。有効なのは先頭の2つです。
ToDo
- オプションのテストをほとんどやってないのでやる
- バグ修正