Zend_Formでのファイルアップロード

2008/05/03 | Zend Framework

「ファイルのアップロード」と書いてはみたものの、実は調べたところ現状Zend_Formにはファイルをアップロードするための仕組みは用意されていない。ゆくゆくは機能追加されるとは思うのだが・・・。
HTTPによるファイルアップロード機能自体に、なんらかの仕様変更があるのではないかと推測している。PEARのHTML_QuickFormにはファイルのアップロード機能が用意されていた。しかしマニュアルによると「推奨しない」とか「将来削除される可能性がある」とか書かれていたりする(現在はHTML_QuickFormのアップデートは期待しないので、なくなることもないと思うけど)。推測しかできないので、余計な推測はこれ以上せず、当面は当該機能がある仕組みを使うのみだ。ちなみにHTML_QuickForm2(HTML_QuickFormのPHP5対応版)にはファイルアップロード機能が用意されているので、フォーム関連はこちらを使うことになると思う。

HTML_QuickFormにしてもZend_Formにしてもウェブを検索するとたいてい評判がよくない。たしかに癖のあるライブラリだとは思う。しかし、かといってフォーム関係ライブラリで有用なものが他にあるわけではないので、現状では貴重なライブラリ群だ。だいたい文句を言っている人は、使いこなせないから文句を言っているのだとは思うが・・・。文句があるならライブラリを自作して公開するとか、代替案を提示してほしいよね(問題点の指摘は大いに結構だけど)。

携帯でのセッション持ち回り

2008/05/02 | ケータイ

携帯でセッション持ち回りをする際の設定メモ。

○session.use_cookies => 1
セッションでクッキーを使うかどうかの設定。
デフォルトは1。
PHP_INI_ALL。

○session.use_only_cookies => 0
セッションをクッキーだけに頼るかどうかの設定。
デフォルトは1(クッキーが使えなければセッションも使えない)。
PHP_INI_ALL。

○session.use_trans_sid => 1
セッションIDをHTML中のURLに付加するかどうかの設定。
デフォルトは0。
PHP<=4.2.3でPHP_INI_ALL。PHP<=5でPHP_INI_PERDIR。

最近の環境ではPHP4.4系以上が多いので、基本的にhtaccessで設定することになる。htaccessでの設定ができない場合は何らかの代替手段を用意する必要あり(もちろん代替手段を検討する前にphp.iniのデフォルト設定で確認しておくこと)。

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),
      )
    )
  );

少し、慣れてきたかな。


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