PEARのQuickFormサンプル
PEARのQuickFormサンプル
PEAR HTML_QuickForm入門ガイドを表示例付きでチェックしてみました。
動作チェック用
一応、これでもQuickFormです。
属性そのままだと、こんな表示になる、ということ。
ルール付きのフォーム
名前欄が空欄で送信されると、エラー表示する例
addRuleメソッドにrequiredを追加するだけで、それっぽくなるわけです。
コンボボックス
setDefaultsメソッドを呼ぶことで、初期値の設定ができます。
実行処理のプロセス化
process_dataという実行処理メソッドに、実行処理を行わせる例です
スタイルシートを使う
class=に続けて、定義したクラス名を指定するだけです。
その動的変更の例
ここでは、動的といってもページを再読み込みしていますが、実際にはAjaxで実装のが本道かな。
コンボボックスでアイテムを変更すると、背景色がスタイルシートで設定した色に切り替わります。
ボタンを横に並べるには、要素グループ
文字列のフォーマット
基本的には、formタグで出来ることなんですが、
PEARのQuickFormを使うと、分かりやすい記述が可能になるので、生産性の向上、バグの減少、などが見込める、ということかな。
出力されるHTMLソースは、エレガントとはいえないかな?
PEAR HTML_QuickForm入門ガイドを表示例付きでチェックしてみました。
動作チェック用
一応、これでもQuickFormです。
属性そのままだと、こんな表示になる、ということ。
ルール付きのフォーム
名前欄が空欄で送信されると、エラー表示する例
addRuleメソッドにrequiredを追加するだけで、それっぽくなるわけです。
コンボボックス
setDefaultsメソッドを呼ぶことで、初期値の設定ができます。
実行処理のプロセス化
process_dataという実行処理メソッドに、実行処理を行わせる例です
スタイルシートを使う
class=に続けて、定義したクラス名を指定するだけです。
その動的変更の例
ここでは、動的といってもページを再読み込みしていますが、実際にはAjaxで実装のが本道かな。
コンボボックスでアイテムを変更すると、背景色がスタイルシートで設定した色に切り替わります。
ボタンを横に並べるには、要素グループ
文字列のフォーマット
■HTML_QuickForm_date
HTML_QuickFormには、カスタム要素という拡張要素が用意されています。
その一つがすぐ上で紹介しているこのHTML_QuickForm_dateです。
ここでは、HTML_QuickForm_dateを使って簡易スケジュール入力フォームを作ってみます。
まずはソース。
このため、addGroupRuleで設定している必須設定は効果を発揮しませんが、まあ、サンプルということで流してください。
動作を見てみたい方は、このリンクとこのリンクでの出力される文字の違うことに注意しながらソースを読んでみてください。
ポイントとなるのはhidden属性のtokenという変数。
何に使うかは、変数名から予測が付くと思います。別にhiddenじゃなくてもいいんですけどね。サンプルなので。
その一つがすぐ上で紹介しているこのHTML_QuickForm_dateです。
ここでは、HTML_QuickForm_dateを使って簡易スケジュール入力フォームを作ってみます。
まずはソース。
<?php
if(!empty($token)&&0<strlen($token)){
print 'token:' . $token . "<br>\n";
}
// メインクラスの読み込み
require_once 'HTML/QuickForm.php';
// HTML_QuickForm オブジェクトを生成
$form = new HTML_QuickForm('schForm');
$dt = date('Y-m-d-H-i');
$arr_dt = explode('-',$dt);
// フォーム要素のデフォルト値を設定
$form->setDefaults(array(
'sch_date' => array('Y'=>$arr_dt[0],'m'=>$arr_dt[1],'d'=>$arr_dt[2],'H'=>$arr_dt[3],'i'=>$arr_dt[4]),
'token'=>$token,
));
// フォームに要素をいくつか追加
$form->addElement('header', null, 'スケジュール追加');
$options = array(
'language' => 'ja',
'format' => 'Y年m月d日H時i分',
'minYear' => date('Y'),
'maxYear' => date('Y') + 1,
'addEmptyOption' => true
);
$form->addElement('hidden', 'token');
$form->addElement('date', 'sch_date', '日時:', $options);
$form->addElement('text', 'sch_title', 'タイトルを入力してください:', array('size' => 50, 'maxlength' => 255));
$form->addElement('text', 'sch_place', '場所を入力してください:', array('size' => 50, 'maxlength' => 255));
$form->addElement('submit', null, '送信');
// フィルタと検証ルールを追加
$form->addGroupRule('sch_date', '日時は必須です', 'required');
$form->addRule('sch_title', 'タイトルは必須です', 'required', null, 'client');
// フォームの妥当性検証
if ($form->validate()) {
$arr_date = $form->exportValue('sch_date');
print '<h2>日時:' . $arr_date['Y'] . '-' . $arr_date['m'] . '-' . $arr_date['d'] .
' ' . $arr_date['H'] . ':' . $arr_date['i'] . "</h2>\n";
echo '<h2>タイトル:' . htmlspecialchars($form->exportValue('sch_title')) . '</h2>';
echo '<h2>場所:' . htmlspecialchars($form->exportValue('sch_place')) . '</h2>';
if(!empty($token)&&0<strlen($token)){
echo '<h2>トークン:' . htmlspecialchars($form->exportValue('token')) . '</h2>';
}
print "<br>\n";
}
// フォームの出力
$form->display();
?>
date関数で現在の日時を取得し、それをもとにセレクトボックスの初期値として与えています。このため、addGroupRuleで設定している必須設定は効果を発揮しませんが、まあ、サンプルということで流してください。
動作を見てみたい方は、このリンクとこのリンクでの出力される文字の違うことに注意しながらソースを読んでみてください。
ポイントとなるのはhidden属性のtokenという変数。
何に使うかは、変数名から予測が付くと思います。別にhiddenじゃなくてもいいんですけどね。サンプルなので。
基本的には、formタグで出来ることなんですが、
PEARのQuickFormを使うと、分かりやすい記述が可能になるので、生産性の向上、バグの減少、などが見込める、ということかな。
出力されるHTMLソースは、エレガントとはいえないかな?
■PEARに関連した書籍
(データ提供:Amazon.co.jp)