PHP > メモ > フォームクラス改変のメモ

2006年01月31日

フォームクラスの仕様を大幅に変えたので自分用にメモ。

以前まではclass formの内部で連想配列を作って各値にアクセスしてたが、 内部構造をオブジェクトに変更。

setElement()を使って動的にオブジェクトを生成することにした。 class formはエレメントクラスを取りまとめるラッパクラスの位置付けにして、 実際の処理は各エレメントクラスに任せることにした。

例えば
class sampleForm extends form{
   //コンストラクター
   sampleForm(){
      $name = 'name';
   $mail = 'mail';
	  
   $this->setElement($name,$mail,'text');
      $this->setProperty($name,$mail,'maxlengh','50');
      $this->name->setProperty('value','名前');
      $this->name->setProperty('name','name');
      $this->mail->setProperty('value','メルアド');
      $this->mail->setProperty('name','mail');
   }
}
を例にとってみる。

$this->setElement()で因数をオブジェクト名とクラス名にとり 自クラス内のフィールドとしてオブジェクトを生成、 内部では可変変数で処理していて最後の因数以外はオブジェクト名、最後の因数はクラス名になる。
この例では
$this->name = new __text;
$this->mail = new __text;
が実行される。
他のクラスと競合しないようにクラス名の頭には"__"をつけてある。 ただし、これでも他のライブラリーと競合する場合もでてきそうなので、別途接頭辞が必要である。

form::setProperty()は単なるラッパーで、因数ごとに異なるsetProperty()が呼ばれる。
例では
$this->name->setProperty('maxlengh','50');
$this->mail->setProperty('maxlengh','50');
を実行してるに過ぎない。

つまり上記の例と以下に示す例は等価である。

class sampleForm2 extends form{
   //コンストラクター
   sampleForm2(){
      $name = 'name';
      $mail = 'mail';

      $this->name = new __text;
      $this->mail = new __text;
      $this->name->setProperty('maxlengh','50');
      $this->name->setProperty('maxlengh','50');
      $this->name->setProperty('value','名前');
      $this->name->setProperty('name','name');
      $this->mail->setProperty('value','メルアド');
      $this->mail->setProperty('name','mail');
   }
}

__textクラスを始めとするエレメントクラスは、すべて基底クラスである __form_parts__クラスを継承している。

クラス相関図

__form_parts__ + __input__ + __text
               +           + __password
               +           + __file
               +           + __submit
               +           + __hidden
               +           + __reset
               +           + __button
               +           + __image
               +           + __radio + __checkbox
               + 
               + 
               + __select
               + __textarea

__radioや__checkboxはその性質上共通のプロパティを持ちつつ、 値やテキストが違う複数のエレメントを生成出来るようにしてある。

__selectは内部に<option>タグや<optgroup>タグを生成出来るように作ってある。

エレメントクラス群は内部の構造が多少違っても共通のインターフェイスでアクセスできる。 setProperty()やsetText()やgetTag()がそれに当たる。

他にもクラスの特性ゆえに拡張したメソッドやフィールドを定義して使えるようにした。

まだまだ発展途上でありこのままでは使い物にならないが、 途中経過としてクラスファイルを残しておく。

sampleForm20060131.txt

今後実装すべきは入力チェックとフィルター処理、オブジェクトの永続化。 あと、似たような処理してる所はプライベートメソッドを使って処理する予定。

posted by 37to at : 16:22 | コメント (0) | トラックバック (0)

コメント

この記事に対するコメントはまだありません。


投稿する

投稿者情報を保存しますか?


トラックバック

トラックバックURI


一覧

この記事に対するトラックバックはまだありません。