libro
www.tuyano.com
初心者のためのCakePHP2 プログラミング入門

フォーム送信とForm Helper (1/5)

作成:2011-11-07 08:11
更新:2012-03-20 15:00

■フォームの送信

Webページでプログラムを利用する、といえば、まず思い浮かぶのが「フォーム送信」でしょう。フォームの送信は、利用者から必要な情報を受け取って処理する、サーバーサイドプログラミングの基本中の基本とも言えるものです。

CakePHP2.0では、フォームから送信された情報は$thisの「data」というプロパティにまとめられています。これは連想配列になっており、送られたフォームコントロールのnameをキーとして値が保管されています。例えば、
<input type=”text” name=”hoge”>
こういうコントロールが用意されていたとしたら、この値は、 $this->data[“hoge”] という形で取り出すことができます。実に簡単ですね。では、実際の利用例を下にあげておきましょう。

テキスト、チェックボックス、ラジオボタンといったものを用意したフォームを送信し、その結果を表示しています。基本は$this->dataから値を取り出して出力するだけですが、いくつか注意すべき点があります。

●Checkboxの値
チェックボックスの値は、$this -> data["check1"]というようにして取り出せばいいわけですが、しかしこれには穴があります。チェックがOFF関するだと、この値が用意されない、という点です。したがって、この値をチェックする以前に、「この値がdata配列に存在するかどうか」をチェックする必要があります。

そこで、ここでは isset($this -> data["check1"]) というように値があるかどうかをチェックした上で必要な値を設定するようにしています。

(※実は、この問題は、この後で説明するForm Helperを使えば簡単に解決できます)

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※index.ctp

<h1>Index Page</h1>
<p>this is test View.</p>
<p> </p>
<p>
  <form method="post" action="./form" name="form1">
    <div><input type="text" name="text1" id="text1"></div>
    <div><input type="checkbox" name="check1" id="check1">
    <label for="check1">check1</label></div>
    <div><input type="radio" value="radio_A" 
      name="radio1" id="radio_a">
    <label for="radio_a">Radio A</label>
    <input type="radio" value="radio_B" 
      name="radio1" id="radio_b">
    <label for="radio_b">Radio B</label></div>
    <div><input type="submit" value="送る">
  </form>
</p>
</div>


※form.ctp

<h1>Index Page</h1>
<p>this is test View.</p>
<p>text1: <?php echo $text1; ?></p>
<p>check1: <?php echo $check1; ?></p>
<p>radio1: <?php echo $radio1; ?></p>
<p> </p>
</div>


※SampleController.php

<?php
App::uses('AppController', 'Controller');
App::uses('Sanitize', 'Utility');

class SampleController extends AppController {

  public function index() {}

  public function form() {
    $text1 = $this -> data["text1"];
    $check1 = isset($this -> data["check1"]) ? 
      "On" : "Off";
    $radio1 = $this -> data["radio1"];
    $this -> set("text1", $text1);
    $this -> set("check1", $check1);
    $this -> set("radio1", $radio1);
  }

}

※関連コンテンツ

「初心者のためのCakePHP2 プログラミング入門」に戻る