Motomichi Works Blog

モトミチワークスブログです。その日学習したことについて書いている日記みたいなものです。

vagrantその19-10 cakephp入門をやってみる(Formその1) 入力したvalueの送信と取得の基本

参考にさせて頂いたページ

フォーム送信とForm Helper(1/5):初心者のためのCakePHP2.0 プログラミング入門

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

}

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についての解説

//App::uses( クラス名 , パッケージ名 );
App::uses('AppController', 'Controller');
App::uses('Sanitize', 'Utility');

今回はSanitizeを利用しないんだけど、参考ページにならって、次回使うUtilityパッケージのSanitizeクラスを使用する記述を追加してます。

public function form() {

上記でSampleControllerにformアクションを追加しています。

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

index.ctpで送信されたvalueは$this->data[“hoge”]としてform.ctpで取り出すことができます。

hogeの部分はname属性の値です。

チェックボックスの値について

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

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

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

とのこと