addGroupの代替「fieldset」

2008/04/28 | HTML_QuickForm2

HTML_QuickForm2は、現在のアルファ版では、HTML_QuickFormで用意されていたaddGroupメソッドがない。addGroupは複数の要素を一括して取り扱うことができるので便利なメソッドだった。例えばラジオボタンやチェックボックスを複数作成しておいてそれをグループ化し、作成したグループに対して妥当性チェック(Validation)をかけることができた。
その代わりかどうかはわからないが、HTML_QuickForm2ではaddElementする際に、通常の「text」や「textarea」等以外に「fieldset」なるものが追加されていて、こんな感じで使用する。

$field=$form->addElement(‘fieldset’);

サンプルをみると、複数の要素を一くくりにして扱うための要素のように見える。HTML_QuickFormと同等の処理がしたいのだが、このfieldsetとして作成された要素$fieldに対してaddRuleとかできるのだろうか。
デフォルトで用意されていなくても、createRuleして使えるのであればとても便利なのだが・・・。識者の方がご覧になられることがあれば、ぜひご教示いただきたい部分。どうぞよろしくお願いします。

チェックボックスを配列指定した場合の初期値

2008/04/26 | HTML_QuickForm2

HTML_QuickForm2でも前バージョンと同様に、チェックボックスで送られてくる際のvalue値は1だ。これは「一つのチェックボックスが一つの設問を構成する」という前提で作られているためだと思う(例えば「○○が必要な場合にはチェック」というような感じ)。「当てはまるものすべてにチェックしてください」みたいな設問への配慮がないのはなぜだろう。いつも疑問に思う。

いわゆる「多岐選択」でチェックボックスを使うときはこんな具合に指定する。

$element[]=$myForm->addElement(‘checkbox’,’q1[a]’,NULL,array(‘content’=>’a’));
$element[]=$myForm->addElement(‘checkbox’,’q1[b]’,NULL,array(‘content’=>’b’));
$element[]=$myForm->addElement(‘checkbox’,’q1′,NULL,array(‘content’=>’c’));

name属性が入るべきところにq1[a]という具合に配列っぽく記載する。もちろんこの記述でフォームからデータが送られてくると、値は配列となって送られてくる。

上記のような場合のデフォルト値の設定は配列として与えてやることになる。

$myForm->addDataSource(
  new HTML_QuickForm2_DataSource_Array(
    array(
      ‘q1’=>array(‘a’=>1,’b’=>1),
      )
    )
  );

少し、慣れてきたかな。

デフォルト値の設定

2008/04/24 | HTML_QuickForm2

HTML_QuickForm2は、基本的には前バージョン(HTML_QuickForm)をPHP5のE_STRICTに対応させてリライトしてあるとのことであったが、メソッドで変更とかもあるようだ。まぁ「まだアルファ版だから」なのかもしれないけれど。

新バージョンで、フォーム要素にデフォルト値を設定する際、前バージョンで使っていたsetDefaultsメソッドは使えない(というか、このメソッドは新バージョンでは存在していない)。HTML_QuickForm2での記述はこうだ。

$myForm=& new HTML_QuickForm2(‘myForm’);
$myForm->addElement(‘text’,’q1′);
$myForm->addDataSource(
    new HTML_QuickForm2_DataSource_Array(
        array(
            ‘q1’=>’php’,
          )
      )
  );

q1という名前のテキストボックスを作成して、デフォルト値として「php」と表示させる例だ。以前であれば、このように記述していた。

$myForm->>setDefaults(array(‘q1’=>’php’));

お手軽でよかった。
新バージョンでの記述を見るとsetDefaultsメソッドから
addDataSourceメソッドに変更になっている。その引数はHTML_QuickForm2_DataSource_Arrayオブジェクトになり、さらにそのオブジェクトのコンストラクタに引数としてデフォルト値を渡す、という具合になっている。

別にこれはこれでいいのだが、「PHP5対応のためのリライト」という観点で提供されるのであれば、非推奨でいい(将来的になくなってもいい)のでsetDefaultsメソッドが用意されるべきだと思う。

まぁ「他人の土俵で相撲を取っている」ようなものだから理想論だけ言ってみた。

HTML_QuickForm2を読む

2007/07/17 | HTML_QuickForm2

PHP4にさよならを言わなくてはならなくなった今、本格的にPHP5に取り組まなくてはいけなくなった。いちおうcakePHPで開発をすすめていく予定にしている。cakePHP曰く「他のライブラリを一切必要としない」という高尚な思想はすばらしいとは思うが、それはイコール「cakePHPにないことは自前でどうぞ」ということだ。私は自前でプログラムを書くのは大嫌い!。
データベース関連はcakePHPで用意されているものを使うとして、そのほかの要素はやっぱりPEARで処理したい(ページングを実現するライブラリがないようで、decorate.phpに少しあるくらいだから、DBも要検討だが)。まずはHTML_QuickForm2を読んでみることにした。自分にとってのウェブプログラミングの3大要素は「データベース」「フォーム」「認証」なので、一つずつクリアしていきたい。認証はPEARのAuthかLiveUser。LiveUserはいろいろ出来るようだが、一度も使ったことがないので、多分Authから始める。

HTML_QuickForm2。読もうと試みたけど、見たことがないのがいろいろ出てくる。必要に駆られてPHP5も多少覗いてはいたのだが・・・理解に苦しむ記述が・・・(っていうかimplementsって何?)。
HTML_QuickForm2自体はそれほど難しくなさそうな感じだ。pear.php.netで紹介されているとおり、HTML_QuickFormをPHP5用に書き直しただけ、という印象だ。見たことのある関数がそこかしこにある。
オブジェクトの生成も、

$myForm=& new HTML_QuickForm2(‘myForm’);

みたいな感じでいけそう(未検証)。少し安心した。
まずはPHP5の環境を用意して諸々テストしていくとしよう。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net