フォーム

2018/01/30

フォームをテンプレートに用意

    <form method="get" action="/hello/sendForm">
      <input type="text" name="text1" />
      <inout type="submit" />
    </form>

フォームを送った先

<h1>送信結果</h1>
<p><?=$result ?></p>

ファイル名はsend_form.ctpとする。クラス、メソッド名はキャメル記法なのに対し、アンダースコア記法であることが注意するところ。

コントローラにhello/sendFormのアクションを書く

<?-
  class HelloController extends AppController {
//略
    public function sendForm() {
      $str = $this->request->query[text1]; //getで送ったものはquery連想配列に入っている。
      $result="empty.";
      if ($str != "") {
        $result = "you type:" . $str;
      }
      $this->set("result", $result);
    }
  }
->

フォームを通してでなくても

snedForm?text1=hoge

でも送れる。

ただし、XSS攻撃回避策としてタグを無効化するエスケープ処理を入れる必要がある。それには

<?=
      $this->set("result", htmlspecialchars($result));
=>

とする。

省略記法として

<?=
      $this->set("result", h($result));
=>
でも良い。

PHPフレームワーク CakePHP 3入門