TOP > 読み物 > PHP: ぴゅーっと速くプログラミング > フレームワークを作ってみよう(3)

PHP: ぴゅーっと速くプログラミング

フレームワークを作ってみよう(3)

フォームらしく

今回は前回のフォームをもう少しフォームらしくしてみましょう。 その前に、フォーム変数を扱いやすくするためにクラスに少し手を加えます。 こんな感じ。

framework.php: download source

  1: <?php
  2: /*
  3:  * framework.php
  4:  *   Copyright (C) YAMADA Satoshi
  5:  */
  6: 
  7: define('MYSELF',  $_SERVER['PHP_SELF']);
  8: 
  9: class
 10: framework
 11: {
 12:   function
 13:   framework()
 14:   {
 15:   }
 16: 
 17:   function
 18:   import($array)
 19:   {
 20:     $this->set($_GET, $array);
 21:     $this->set($_POST, $array);
 22:   }
 23: 
 24:   function
 25:   set($hash, $array)
 26:   {
 27:     foreach ($array as $name)
 28:       if (isset($hash[$name]))
 29:         $this->$name = $hash[$name];
 30:   }
 31: 
 32:   function
 33:   main()
 34:   {
 35:     include "$this->action.html";
 36:   }
 37: }
 38: 
 39: // vi:ts=8 sw=2
 40: ?>

コンストラクタはとりあえず空になりました。 その代わり、import()set()というメソッドが追加になりました。 import()は、フォーム変数をクラスメンバに設定します。 set()import()から呼び出されるサブルーチンで、通常は直接呼ばれることは少ないと思います。

で、これに対応したサンプルソースはこんな感じになります。

sample.php: download source

  1: <?php
  2: 
  3: require('framework.php');
  4: 
  5: class
  6: sample extends framework
  7: {
  8:   function
  9:   sample()
 10:   {
 11:     $this->class_vars = array(
 12:       'action',
 13: 
 14:       'name',
 15:       'email',
 16:     );
 17:     $this->import($this->class_vars);
 18: 
 19:     if (!$this->action) $this->action = 'form';
 20:   }
 21: }
 22: 
 23: $sample = new sample();
 24: $sample->main();
 25: 
 26: // vi:ts=8 sw=2
 27: ?>

こちらのコンストラクタに少し追加になりました。 要は、フォームで使う変数を配列で用意し、import()を呼び出すわけです。 "action"というのはフォームの流れを制御する変数です。

で、各画面の内容は次の通り。フォーム要素を追加しただけです。

form.html: download source

  1: <h1>フォーム</h1>
  2: 
  3: <form action="<?= MYSELF ?>" method="POST">
  4: <input type="hidden" name="action" value="confirm" />
  5: 名前: <input type="text" name="name" value="<?= $this->name ?>"><br />
  6: メールアドレス: <input type="text" name="email" value="<?= $this->email ?>"><br />
  7: <input type="submit" value="次へ" />
  8: </form>

confirm.html: download source

  1: <h1>確認</h1>
  2: 
  3: <form action="<?= MYSELF ?>" method="POST">
  4: <input type="hidden" name="action" value="done" />
  5: <input type="hidden" name="name" value="<?= $this->name ?>" />
  6: <input type="hidden" name="email" value="<?= $this->email ?>" />
  7: 名前: <strong><?= $this->name ?></strong><br />
  8: メールアドレス: <strong><?= $this->email ?></strong><br />
  9: <input type="submit" value="次へ" />
 10: </form>

done.html: download source

  1: <h1>完了</h1>
  2: 
  3: <p>完了しました。</p>
  4: 
  5: 名前: <strong><?= $this->name ?></strong><br />
  6: メールアドレス: <strong><?= $this->email ?></strong><br />

わかります? [ 実行例 ]


[ 前へ | 次へ ]