PHP > メモ > フォームクラスとデザインパターン

2006年01月28日

ちょっとずつ形になってきたフォームを取り扱うクラス。 次なる課題は入力チェックとエラー処理とその振る舞い。

入力チェックの際にエラーが発生した時に、 $error['フォーム名']にエラーメッセージを入れといて、 どこからでも取得出来るようにしたい。
例えば

<html>
   <head>
   </head>
   <body>
      <form>
         <?php $form->dispAllError(); ?>
         <?php $form->disp('name'); ?>
         <?php $form->disp('age'); ?>
         <?php $form->disp('address'); ?>
         <?php $form->disp('phone'); ?>
         <?php $form->disp('mail'); ?>
      </form>
   </body>
</html>

のようなhtmlテンプレートで、 入力チェックの際に何らかのエラーが発生してれば
$form->dispAllError()は何らかのエラーメッセージを吐き、 エラーが無ければ何も吐かない。

ついでにdisp()メソッドもエラーがあれば値を保持した、 状態のフォーム部品を、無ければ実際に送信した内容をhtmlで表示すれば、 htmlテンプレートはスマートになるかな?

でもそれだと、プレゼンテーションロジックが分断されてしまうので、 あくまでプレゼンテーションデータとして保持するほうがいいのかな?
disp()でフォームタグを吐く時点で既にプレゼンテーションロジックが分断されてる気もするが・・・
ならば、

<?php $disp = new disp(); ?>
<html>
   <head>
   </head>
   <body>
      <form>
         <?php $disp->formError(); ?>
         <?php $disp->formName(); ?>
         <?php $disp->formAge(); ?>
         <?php $disp->formAddress(); ?>
         <?php $disp->formPhone(); ?>
         <?php $disp->formMail(); ?>
      </form>
   </body>
</html>

<?php
class disp {
   var $form;

   function disp(){
      //フォームクラスのインスタンス
      $this->form = new sampleForm();
   }
   
   function formError(){
      //エラーメッセージが格納されてるかどうか。デフォルトはNULL、格納されてれば配列
      if(is_array($this->form->errorMsg)){
	     foreach($this->form->errorMsg as  $msg){
		    print '<b style="font-size:larger">'.$msg.'</b><br>';
		 }
      }
   }
   function formName(){
      if(is_array($this->form->errorMsg)){
	     //入力された値を保持したままフォームの部品を表示
	     print $this->form->disp('name');
      }else{
	     //入力された値を表示
	     print $this->form->get('name');
	  }
	  print '<br>';
   }
   //以下省略
   function formAge(){ }
   function formAddress(){ }
   function formPhone(){ }
   function formMail(){ }
}
?>

みたいな感じで書くのがいいのだろうか? そもそもデザインパターンとかあんまり理解していないし難しいな。 もう少し考えよう。

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

コメント

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


投稿する

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


トラックバック

トラックバックURI


一覧

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