Ethna Archive
Ethna_ActionForm エスケープの罠
- 2007-10-11 (木)
- Ethna
Ethnaではテンプレートで使う値を$form、$app、$app_neの3つの変数に格納してから取得します。このうち$form、$appの2つの変数から値を取得すると、htmlの特殊文字を自動でエスケープしてくれる。私はこのエスケープがViewClassの内部で行っているとばかり思っていたら違いました。実際はActionFormのgetArray()、getAppNEArray()を使った時にエスケープは行われてます。よって入力されたままのフォームの値をまとめて取得したい場合には、getArray(false)のようにgetArray()に引数’false’を渡して取得しましょう。今日はこれで1時間ぐらいハマってしまった。
Ethna ActionForm
- 2007-07-27 (金)
- Ethna
私が普段使っているプログラミング言語は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)
-
- ホメオパシーに信頼を寄せてきた皆さんへ|ほたるいかの書きつけ
- プロのサーバ管理者がApacheのStartServers, (Min|Max)SpareServers, MaxClientsを同じにする理由 - blog.nomadscafe.jp
- The Heavy Metal Band Site
- Magento - Wiki - Using Collections in Magento
- 他人が肯定しても、自己否定的な人間は自分を肯定できない:こころの肥溜め:So-netブログ
- お金が人を幸福にしない理由:心理学実験から | WIRED VISION
- Interactive Infographic of the World's Best Countries - Newsweek
- The Web Is Dead. Long Live the Internet | Magazine
- Commercial Add Ons to Open Source Software: aheadWorks and Magento — Open Source Strategies, Inc.
- Rule number one in Magento extension development • Inchoo
- Feeds