WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

PEAR::HTML_QuickForm で簡単にフォームを作成する

      2012/12/14

PEAR::HTML_QuickFormとは?

HTML_QuickFormライブラリは、その名の通りフォームを素早く定型的に作るためのフレームワークを提供します。
フォームの出力だけではなく、入力されたデータの検証も HTML_QuickFormライブラリのメソッドを利用して簡単に行うことができます。

PEAR::HTML_QuickFormのインストール

pear list コマンドでインストール済みのライブラリを確認できます。
その一覧の中に HTML_QuickForm がない場合は下記コマンドでインストールを実行します。

# pear install HTML_QuickForm

HTML_QuickFormの使い方

ここではサンプルとして簡単なメールフォームをHTML_QuickFormで出力してみます。
以下のサンプルスクリプトをコピーしてサーバに設置し、ブラウザでアクセスするとフォームが表示されます。

test4qform.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>PEAR::HTML_QuickFormでお問い合わせフォームを出力するサンプル</title>
</head>
<body>
<?php echo '<?php'; ?>

require_once ('HTML/QuickForm.php');

$form = new HTML_QuickForm('inquiries', 'POST', '');    // ① コンストラクタのパラメータ解説を参照

// ② フォーム要素の追加解説を参照
$form->addElement('header', 'MyHeader', 'お問い合わせフォーム');
$type = array("1" => "サイトの内容について",
              "2" => "相互リンクのお申し込み",
              "3" => "その他");
$form->addElement('select', 'type', '問い合わせ種別:', $type);
$form->addElement('text', 'name', '名前');
$form->addElement('text', 'mail', 'メール');
$form->addElement('text', 'subject', '件名');
$form->addElement('textarea', 'message', '本文');
$return_mail[] = $form->createElement('radio', 'return_mail', NULL, 'はい', 'yes');
$return_mail[] = $form->createElement('radio', 'return_mail', NULL, 'いいえ', 'no');
$form->addGroup($return_mail, 'return_mail', "返信を希望しますか?:");
$form->addElement('submit', 'send', '送信');

$form->display();    // ③ フォームの出力解説を参照
?>
</body>
</html>

コンストラクタのパラメータ

HTML_QuickForm のコンストラクタでは、主に form タグの属性をロードします。

HTML_QuickForm([string $formName = ” [, string $method = ‘post’ [, string $action = ” [, string $target = ” [, mixed $attributes = NULL [, bool $trackSubmit = FALSE ]]]]]])
$formName : フォームの名前
$method : form タグの method 属性の値
$action : form タグの action 属性の値
$target : form タグの target 属性の値
$attributes : form タグのその他の属性(配列、または文字列で渡す)
$trackSubmit: フォームから送信されたことを確認する機能を 使用するため、hidden フィールドを追加するかどうかを指定。 $_GET あるいは $_POST の値にそのフィールドが存在しない場合、フォームは送信されなかったと考えられます。

フォーム要素の追加

フォームの要素を作成・追加するには、addElement メソッド・ createElement メソッドを実行します。
要素とは、テキストボックスやテキストエリア、セレクトボックス、ラジオボタンなどフォームを構成するコントロールのことです。

以下はaddElement メソッドの構文になります。
追加する要素の種類によって構文(引数の数やデータ型)が異なるのでその点を注意する必要があります。

追加する要素の種類 構文
AdvCheckBox addElement(‘advcheckbox’, string $name, string $label, string $text, mixed $attr, mixed $values)
Button addElement(‘button’, string $name, string $value, mixed $attr)
CheckBox addElement(‘checkbox’, string $name, string $label, string $text, mixed $attr)
Date addElement(‘date’, string $name, string $label, array $opt, mixed $attr)
File addElement(‘file’, string $name, string $label, mixed $attr)
Header addElement(‘header’, string $name, string $label)
Hidden addElement(‘hidden’, string $name, string $value, mixed $attr)
HierSelect addElement(‘hierselect’, string $name, string $label, mixed $attr)
HTML addElement(‘html’, string $html)
Image addElement(‘image’, string $name, string $src, mixed $attr)
Link addElement(‘link’, string $name, string $label, string $href, string $value, mixed $attr)
Password addElement(‘password’, string $name, string $label, mixed $attr)
Radio addElement(‘radio’, string $name, string $text, int $value, mixed $attr)
Reset addElement(‘reset’, string $name, mixed $attr)
Select addElement(‘select’, string $name, string $label, mixed $value, mixed $attr)
Static addElement(‘static’, string $label, string $text)
Submit addElement(‘submit’, string $name, string $value, mixed $attr)
Text addElement(‘text’, string $name, string $label, mixed $attr)
TextArea addElement(‘textarea’, string $name, string $label, mixed $attr)

createElement メソッドも上表と同様の構文で要素を操作することができます。

createElementメソッドとaddElementメソッドは挙動に違いがあります。
addElementメソッドが指定された単一の要素をフォームに直接追加するのに対して、createElementメソッドは新規の要素を生成するだけでフォームへの追加は行いません。

createElementメソッドで作成した要素は以下のようにいったん配列に格納しておいて、addGroupメソッドで要素グループとしてフォームに追加します。

$gender[] = $form->createElement('radio', 'gender', NULL, '男', 'male');
$gender[] = $form->createElement('radio', 'gender', NULL, '女', 'female');
$form->addGroup($gender, 'gender', "性別:");

要素グループを追加するaddGroupメソッドの構文は以下の通りです。

HTML_QuickForm::addGroup(array $elements [, string $name = null [, mixed $groupLabel = ” [, string $separator = null [, string $appendName = true ]]]])
array $elements : グループを構成する要素の配列
string $name : (オプション) グループ名
mixed $groupLabel : (オプション) グループのラベル
mixed $separator : (オプション) 要素を区切るために使用する、文字列あるいは文字列の配列
boolean $appendName : (オプション) フォーム要素の名前にグループ名を使用するかどうか、 つまり groupName[elementName] にするかそれとも elementName にするか

フォームの出力

フォームを出力するときは display メソッドを実行します。

string HTML_QuickForm::display()
フォームをHTMLで出力する

以上、PEAR::HTML_QuickForm でフォームを出力するまでの手順でした。
より重要な入力データの検証などは別途ページを設けて記事を書きたいと思います。

参考資料

 - PEAR , , ,