Home > PHP > Ethna

Ethna Archive

Ethna_ActionForm エスケープの罠

Ethnaではテンプレートで使う値を$form、$app、$app_neの3つの変数に格納してから取得します。このうち$form、$appの2つの変数から値を取得すると、htmlの特殊文字を自動でエスケープしてくれる。私はこのエスケープがViewClassの内部で行っているとばかり思っていたら違いました。実際はActionFormのgetArray()、getAppNEArray()を使った時にエスケープは行われてます。よって入力されたままのフォームの値をまとめて取得したい場合には、getArray(false)のようにgetArray()に引数’false’を渡して取得しましょう。今日はこれで1時間ぐらいハマってしまった。

Ethna ActionForm

私が普段使っているプログラミング言語はPHPです。プログラムの入りがJAVAだったのでスッゴイ簡単な反面、機能不足なところも感じます。特に趣味でやる分には最新のPHP5でがんがん組めるのでだいぶマシなのですが、仕事となるとサーバーの関係上どうしても中途半端にオブジェクト指向に対応したPHP4になってしまうわけです。だからちょっとでも楽に開発しようとPHP4対応のフレームワークEthnaを使い始めました。いや〜、凄い楽しい!プログラミング初心者には勉強なることだらけだ!

今日そのEthnaで結構便利な機能を見つけたので書いときます。

EthnaではEthna_ActionFormを継承したクラスの中で入力データの定義を行い、その定義を元に入力データのチェックを行っています。ちなみにこんな感じ

class Sample_Form_Index extends Sample_ActionForm
{
  /** @var  bool  バリデータにプラグインを使うフラグ */
  var $use_validator_plugin = false;

  /**
   *  @access   private
   *  @var    array   フォーム値定義
   */
  var $form = array(
    'name' => array(
      'type' => VAR_TYPE_STRING,
      'form_type' => FORM_TYPE_TEXT,
      'name' => '名前',
      'max' => 40,
      'reqired' => true,
      'filter' => FILTER_FW,
    ),
    'kana' => array(
      'type' => VAR_TYPE_STRING,
      'form_type' => FORM_TYPE_TEXT,
      'name' => 'フリガナ',
      'max' => 40,
      'filter' => FILTER_FW,
    ),
  );
}

今回2つしか定義してないですが普通はもう少し多くの定義を書くことになる訳で、これを毎回書くのが面倒なんです。特にお決まりの名前、フリガナ、メールアドレスなどなど、毎回そんな定義なんて変わらないですし。そんな時に便利なのが $form_template。

Ethna_ActionFormを継承したActionFormでこの$form_templateを定義すると、add_actionで作られるActionFormクラスでキーを指定して空の配列を代入するだけで入力の定義が出来てしまうのです。

$form_template定義

class Sample_ActionForm extends Ethna_ActionForm
{
  /**#@+
   *  @access private
   */

  /** @var  array   フォーム値定義(デフォルト) */
  var $form_template = array(
    'name' => array(
      'type' => VAR_TYPE_STRING,
      'form_type' => FORM_TYPE_TEXT,
      'name' => '名前',
      'max' => 40,
      'filter' => FILTER_FW,
    ),
    'kana' => array(
      'type' => VAR_TYPE_STRING,
      'form_type' => FORM_TYPE_TEXT,
      'name' => 'フリガナ',
      'max' => 40,
      'filter' => FILTER_FW,
    )
}

$form_template定義後の$form定義

class Sample_Form_Index extends Sample_ActionForm
{
  /** @var  bool  バリデータにプラグインを使うフラグ */
  var $use_validator_plugin = false;

  /**
   *  @access   private
   *  @var    array   フォーム値定義
   */
  var $form = array(
    'name' => array(),
    'kana' => array(),
  );
}

これで一度定義しておけば後はキーを指定するだけで良いので楽です。

とここまでは実はちょっと前まで知っていたのですが今日 Ethna_ActionFormのソースコードを見ていたら気づいてしました!なんと必要なものだけ上書きできたみたいです。

class Sample_Form_Index extends Sample_ActionForm
{
  /** @var  bool  バリデータにプラグインを使うフラグ */
  var $use_validator_plugin = false;

  /**
   *  @access   private
   *  @var    array   フォーム値定義
   */
  var $form = array(
    'name' => array(
      'required' => true,
    ),
    'kana' => array(
      'required' => true,
    ),
  );
}

こんな感じで ‘required’だけ定義しても他の’type’、’form_type’…などは$form_templateのまんま定義されるので必要なとこだけ追加や変更ができる。いや〜、便利!

こんな感じでフレームワークを使ってると新たな発見があって楽しいな〜。家ではPHP5がガンガン使えるので、つい先日ヴァージョン1.0.0 が出たばかりのZend Frameworkを使ってます。こっちもなかなか面白いんで、なんかあったらお伝えします。

Home > Ethna

Search
ezzy's latest bookmarks (delicious)
Feeds

Page Top