私が普段使っているプログラミング言語は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を使ってます。こっちもなかなか面白いんで、なんかあったらお伝えします。