PEARのQuickFormサンプル
PEARのQuickFormサンプル
PEAR HTML_QuickForm入門ガイドを表示例付きでチェックしてみました。



動作チェック用
QuickFormのテスト
一応、これでもQuickFormです。
属性そのままだと、こんな表示になる、ということ。


ルール付きのフォーム
名前欄が空欄で送信されると、エラー表示する例
QuickFormのテスト
*あなたのお名前は?
* denotes required field
addRuleメソッドにrequiredを追加するだけで、それっぽくなるわけです。


コンボボックス
ユーザ名の編集
敬称:
名:
性:
setDefaultsメソッドを呼ぶことで、初期値の設定ができます。


実行処理のプロセス化
ユーザ名の編集
敬称:
名:
性:
process_dataという実行処理メソッドに、実行処理を行わせる例です


スタイルシートを使う
Details:
Details:
Details:
class=に続けて、定義したクラス名を指定するだけです。


その動的変更の例
ここでは、動的といってもページを再読み込みしていますが、実際にはAjaxで実装のが本道かな。
Select status:
コンボボックスでアイテムを変更すると、背景色がスタイルシートで設定した色に切り替わります。


ボタンを横に並べるには、要素グループ
QuickFormのテスト
*あなたの名前は?
 
* denotes required field


文字列のフォーマット
Choose date

■HTML_QuickForm_date

HTML_QuickFormには、カスタム要素という拡張要素が用意されています。
その一つがすぐ上で紹介しているこの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)



■お知らせと連絡先

このウェブサイトで取り上げて欲しい話題や分かりにくい点などありましたら、
以下のメールアドレス宛にメッセージをいただければ、参考にさせていただきます。

メールアドレスは、work_komiあっとまーくyahoo.co.jpです。
(「あっとまーく」は、半角英数のあっとまーくに変換してね。)

また、XBOXをお使いの方は、ゲーマータグ(akbox)にてフレンドリクエストを受け付けています。