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して使えるのであればとても便利なのだが・・・。識者の方がご覧になられることがあれば、ぜひご教示いただきたい部分。どうぞよろしくお願いします。

Zend_Formでのチェックボックス作成

2008/04/27 | Zend Framework

HTML_QuickForm2を使おうといろいろ試行錯誤しているが、最近Zend Frameworkに触れる機会があり(といっても自分で開発案件を抱えているわけではない)、そちらでも試してみた。

Zend Frameworkはフレームワークとして機能するのは当然だが、個々のライブラリを個別に使用することもできる非常にすばらしいツールだ。ただサンプルスクリプト自体がフレームワーク前提で記述されているようなので、お世辞にもわかりやすいとはいえない。便利なサンプル集がたくさんあるとどんどん使いたいのだが・・・。

フォームの作成はZend_Formが担当する。Zend_Formを試していて「よく考えてある!」と思ったのはチェックボックス。Zend_Form_Element_MultiCheckboxなんていうそのまんま使いたくなるようなライブラリが用意されている。もちろん複数のチェックボックスを扱うためのライブラリだ。これを使った記述方法は以下の通り。

$element=new Zend_Form_Element_MultiCheckbox(‘name’);
$element->setMultiOptions(
    array(
        ‘a’=>’A’,
        ‘b’=>’B’,
        ‘c’=>’C’,
      )
  );

これだけで配列形式で受け取ることができる複数チェックボックスを作成することができる。HTML_QuickForm2と違ういい点は値(value属性)を自由に設定できるところだ。さすがは後発フレームワーク。かゆいところに手が届いている。まだ慣れないけれど、当面ソースを追いかける努力をしてみよう。

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

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メソッドが用意されるべきだと思う。

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

call_user_func関数とcall_user_func_array関数の違い

2008/04/23 | PHPの基本

call_user_func関数とcall_user_func_array関数の違いについて調べてみた。根本的な機能の違いを見つけることはできなかった。両者の違いは以下の点。

○call_user_func関数の引数は一つ以上(可変)
一つ目はコールバックする関数名。二つ目以降はその関数に引数として渡される。

○call_user_func_array関数の引数は二つ(固定)
一つ目はコールバックする関数名。二つ目は配列で指定し、コールバックする関数への引数として渡される。

根本的な問題ではないが、引数の渡し方だけが違うようだ。しかし、ある意味call_user_func_array関数のほうが便利に使えるかもしれないと思った。引数の数が固定だから、扱いやすいような気がする(なんとなくcall_user_funcのほうが軽そうだが、おそらく差はほとんどないだろう)。


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