この文書は、PEAR general メーリングリスト に投稿された質問を基にして作成されています。 メーリングリストのアーカイブを検索すると、 より詳細な回答や例が見つけられるでしょう。
<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.ini
の include_path
や、PHP の
get_included_files()
関数で、実際に インクルードされているのが
どのファイルなのかを確認しましょう。
HTML_QuickForm の
コンストラクタ
には $trackSubmit
というパラメータを指定することができます。
これを TRUE にすると、実際にフォームが送信されたのかどうかを
QuickForm がチェックするようになります。また、これは
1 つのページに複数のフォームが定義されている場合にも有用です。
'date'
要素のデフォルト値や定数を設定するにはどうすればよいですか?
Date
要素は、本質的には select 要素の
グループ
です。
要素を作成する 際に 'format'
オプションを指定することで、このグループの構造を定義することができます。
<?php
$form->addElement('date', 'foo', 'The date:', array('format' => 'Y m d'));
?>
つまり、その他のグループと同様に、 デフォルト値を配列として設定できるということです。
<?php
$form->setDefaults(array(
'foo' => array('Y' => 2004, 'm' => 9, 'd' => 29)
));
?>
データベースと連携しているアプリケーションで使用しやすくするために、 (mktime() で作成した) Unix タイムスタンプや日付文字列を date 要素に指定することもできるようになっています。日付文字列は strtotime() 関数で生成したものを想定しているので、この関数の制限を考慮してください。
"Call to a member function on a non-object"
とか "Undefined function"
のような変なエラーが発生します。
特にグループを使用している場合に発生するようです。
これらのエラーが発生しやすいのは、
addGroup()
に渡した $elements
配列の中身が
HTML_QuickForm_element でない場合です。
例えば PEAR_Error が含まれていることが考えられます
(配列の内容をチェックするか、エラー処理ロジックを記述しましょう)。
あるいは php.ini
で register_globals
がオンになっている場合には、フォームの送信内容が含まれてしまっていることも
考えられます (配列に要素を追加する前には、まず配列をクリアしましょう)。
QuickForm は <form>
タグに 'name'
属性を追加しますが、これは XHTML Strict に違反しています。Quickform のリリース
3.2.2 以降ではもはやこの属性を使用していませんが、
単に過去との互換性を保つためだけのために残されています。
もしどうしても XHTML Strict に準拠したい場合で あなたの
コードがこの属性に依存していない場合は、removeAttribute()
メソッドから該当部分を削除することが可能です。
'required'
ルールがうまく動作しません!
'uploadedfile'
ルールを使用すべきです。
'date'
や 'hierselect'
についても同様です。
* denotes required field
や Invalid information entered. / Please correct these fields.
を変更するにはどうすればいいのですか?
それぞれ、 setRequiredNote() および setJsWarnings() メソッドで変更します。