5

さまざまなタイプのフィールドを持つ新しいフォームを表示するために使用できる実世界のフォーム作成クラスを作成するにはどうすればよいですか?必要なフィールドの数、ドロップダウンを使用でき、OOP を使用してこれらすべてを実行できますか?

4

5 に答える 5

8

正直なところ、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など)を使用してフィールドの標準グループを定義でき、それらを一貫した方法で多くのページで使用できます。

于 2008-11-13T23:49:41.030 に答える
7

あなたは間違いなくできます。フォーム自体に関する情報(、、、属性)を格納するFormクラスについて考えてみmethodます。また、上部にオプションの見出しや説明テキストなどを挿入します。もちろん、入力要素の配列も必要になります。これらはおそらく独自のクラスに入れることができます(ただし、InputText、InputCheckbox、InputRadioのサブクラス化は少し上になります)。漠然としたスケルトンデザインは次のとおりです。actionenctype

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に変換することができます。

于 2008-11-13T23:09:42.703 に答える
0

参考までに、 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 インスタンスが返されるという追加の利点があります。

于 2012-06-04T17:26:42.430 に答える