さまざまなタイプのフィールドを持つ新しいフォームを表示するために使用できる実世界のフォーム作成クラスを作成するにはどうすればよいですか?必要なフィールドの数、ドロップダウンを使用でき、OOP を使用してこれらすべてを実行できますか?
5 に答える
正直なところ、PHP用の成熟したフォームパッケージがいくつかあることを考えると、私は自分自身をロールバックしません。
PHP4サイトにはPEARのHTML_QuickFormパッケージ(http://pear.php.net/manual/en/package.html.html-quickform.php)を使用しています。
PHP5の場合、Zend_Form(http://framework.zend.com/manual/en/zend.form.html)を調べます。
クイックフォームコードでは、構成配列を使用してフォームを定義できるヘルパークラスを使用しています。例えば:
echo QuickFormHelper::renderFromConfig(array(
'name' => 'area_edit',
'elements' => array(
'area_id' => array('type' => 'hidden'),
'active' => array('type' => 'toggle'),
'site_name' => array('type' => 'text'),
'base_url' => array('type' => 'text'),
'email' => array('type' => 'text'),
'email_admin' => array('type' => 'text'),
'email_financial' => array('type' => 'text'),
'cron_enabled' => array('type' => 'toggle'),
'address' => array('type' => 'address'),
),
'groups' => array(
'Basic Details' => array('site_name', 'base_url'),
'Address Details' => array('address'),
'Misc Details' => array(), // SM: Display the rest with this heading.
),
'defaults' => $site,
'callback_on_success' => array(
'object' => $module,
'function' => 'saveSite',
),
));
上記の要素タイプ'address'および'toggle'は、実際には複数のフォームフィールド(基本的にはメタタイプ)であることに注意してください。これが私がこのヘルパークラスで気に入っていることです。ルール(address、credit_cardなど)を使用してフィールドの標準グループを定義でき、それらを一貫した方法で多くのページで使用できます。
あなたは間違いなくできます。フォーム自体に関する情報(、、、属性)を格納するFormクラスについて考えてみmethod
ます。また、上部にオプションの見出しや説明テキストなどを挿入します。もちろん、入力要素の配列も必要になります。これらはおそらく独自のクラスに入れることができます(ただし、InputText、InputCheckbox、InputRadioのサブクラス化は少し上になります)。漠然としたスケルトンデザインは次のとおりです。action
enctype
class Form {
var $attributes, // array, with keys ['method' => 'post', 'action' => 'mypage.php'...]
$heading,
$description,
$inputs // array of FormInput elements
;
function render() {
$output = "<form " . /* insert attributes here */ ">"
. "<h1>" . $this->heading . "</h1>"
. "<p>" . $this->description . "</p>"
;
// wrap your inputs in whatever output style you prefer:
// ordered list, table, etc.
foreach ($this->inputs as $input) {
$output .= $input->render();
}
$output .= "</form>";
return $output;
}
}
FormInputクラスは、タイプ、名前、値、ラベルなどの基本を格納するだけで済みます。トリッキーになりたい場合は、検証ルールを適用して、レンダリング時にJavascriptに変換することができます。
参考までに、 Khurram Khan によるObject Oriented Formsは、PHP の優れたオブジェクト指向フォームの実装です。
コードの例を次に示します。
$form = new Form("Register", "form.php");
$personal = new Block("Personal Information");
$name = new Text("name", "Your name");
$name->setDescription("this is my description");
$name->addValidator(new MaxLengthValidator("The name you have entered is too long", 30));
...
もう 1 つのより一般的な実装はPHPlibです。ただし、これは少し扱いにくいと思います。クラスにラップされた標準的な関数型プログラミングのようです。
別のオプションは、組み込みDOMライブラリの抽象化を作成することです。これにより、OO 表記を使用して任意の種類のフォームとフォーム要素を手動で作成できるようになり、プログラムの他の場所で使用できる OO DOM インスタンスが返されるという追加の利点があります。