クイックヘルプ

クイックヘルプ -- よくある質問への回答

説明

この文書は、PEAR general メーリングリスト に投稿された質問を基にして作成されています。 メーリングリストのアーカイブを検索すると、 より詳細な回答や例が見つけられるでしょう。

HTML_QuickForm FAQ

1. HTML_QuickForm で作成したフォームから送信することができません。 ページの HTML ソースを見ると、<formArray> みたいなのがあります。
2. フォームを含むスクリプトに GET パラメータを渡すと、 QuickForm ではフォームが既に送信されているものととらえてしまい、 検証エラーが発生するようです。
3. 'date' 要素のデフォルト値や定数を設定するにはどうすればよいですか?
4. "Call to a member function on a non-object" とか "Undefined function" のような変なエラーが発生します。 特にグループを使用している場合に発生するようです。
5. QuickForm の生成するコードが XHTML Strict ではありません!
6. 'required' ルールがうまく動作しません!
7. 入力チェック用のメッセージ * denotes required fieldInvalid information entered. / Please correct these fields. を変更するにはどうすればいいのですか?

1. HTML_QuickForm で作成したフォームから送信することができません。 ページの HTML ソースを見ると、<formArray> みたいなのがあります。

最近のバージョンの HTML_QuickForm package を正しく動作させるためには、 HTML_Common パッケージのバージョン 1.2.1 (HTML/Common.php の CVS リビジョン 1.8) が必要です。もしこれより古いバージョンの HTML_Common が読み込まれていると、(それだけで) この現象が発生します。

以下のコマンドを入力すると、

$ pear list
              
HTML_Common 1.2.1 が インストールされている かどうかを調べることができます。適切なバージョンが インストールされているにもかかわらず、別の場所にある古いバージョンの HTML_Common をインクルードしてしまっている場合もありえます。 php.iniinclude_path や、PHP の get_included_files() 関数で、実際に インクルードされているのが どのファイルなのかを確認しましょう。

2. フォームを含むスクリプトに GET パラメータを渡すと、 QuickForm ではフォームが既に送信されているものととらえてしまい、 検証エラーが発生するようです。

HTML_QuickFormコンストラクタ には $trackSubmit というパラメータを指定することができます。 これを TRUE にすると、実際にフォームが送信されたのかどうかを QuickForm がチェックするようになります。また、これは 1 つのページに複数のフォームが定義されている場合にも有用です。

3. 'date' 要素のデフォルト値や定数を設定するにはどうすればよいですか?

Date 要素は、本質的には select 要素の グループ です。 要素を作成する 際に 'format' オプションを指定することで、このグループの構造を定義することができます。
$form->addElement('date', 'foo', 'The date:', array('format' => 'Y m d'));
つまり、その他のグループと同様に、 デフォルト値を配列として設定できるということです。
$form->setDefaults(array(
    'foo' => array('Y' => 2004, 'm' => 9, 'd' => 29)
));

データベースと連携しているアプリケーションで使用しやすくするために、 (mktime() で作成した) Unix タイムスタンプや日付文字列を date 要素に指定することもできるようになっています。日付文字列は strtotime() 関数で生成したものを想定しているので、この関数の制限を考慮してください。

4. "Call to a member function on a non-object" とか "Undefined function" のような変なエラーが発生します。 特にグループを使用している場合に発生するようです。

これらのエラーが発生しやすいのは、 addGroup() に渡した $elements 配列の中身が HTML_QuickForm_element でない場合です。 例えば PEAR_Error が含まれていることが考えられます (配列の内容をチェックするか、エラー処理ロジックを記述しましょう)。 あるいは php.iniregister_globals がオンになっている場合には、フォームの送信内容が含まれてしまっていることも 考えられます (配列に要素を追加する前には、まず配列をクリアしましょう)。

5. QuickForm の生成するコードが XHTML Strict ではありません!

QuickForm は <form> タグに 'name' 属性を追加しますが、これは XHTML Strict に違反しています。Quickform のリリース 3.2.2 以降ではもはやこの属性を使用していませんが、 単に過去との互換性を保つためだけのために残されています。 もしどうしても XHTML Strict に準拠したい場合で あなたの コードがこの属性に依存していない場合は、removeAttribute() メソッドから該当部分を削除することが可能です。

6. 'required' ルールがうまく動作しません!

  • ファイルアップロード要素を使用しているのなら、代わりに 'uploadedfile' ルールを使用すべきです。

  • group 要素を使用しているのなら、 addRule() の代わりに addGroupRule() メソッドを使用すべきです。 group 要素をもとにして作成されている要素である 'date''hierselect' についても同様です。

7. 入力チェック用のメッセージ * denotes required fieldInvalid information entered. / Please correct these fields. を変更するにはどうすればいいのですか?

それぞれ、 setRequiredNote() および setJsWarnings() メソッドで変更します。