CakePHP1.3.6:フォームの利用(POSTで送信)

「cake勉強中さん」からコードの間違いを指摘していただきました。
どうもありがとうございました。tetsuya.odaka 2010/11/30
===========================================
フレームワークを利用するということで、フォームにPOSTするときの挙動を調べてみる。
以下のような画面からポストして、何がコントローラーに渡されるのか調べる。

プログラム名はTestFormとするので、/app/controllersに"test_form_controller.php"、/app/views/に"test_formディレクトリ"を作成する。

挙動としては、まず、TestFormのindexメソッドにアクセスして、上の画面を表示し、POSTした結果をvar_dumpによって表示する。

コントローラーの作成

まず、コントローラーを作成する。POSTされた結果は、コントローラーオブジェクトのparamsというメンバー変数に格納される。これをreceiveメソッドでダンプする。

<?php

class TestFormController extends AppController{
	
	public $name = 'TestForm';
	public $uses = null;
	public $layout = 'myznala';
	public $autoLayout = true;
	public $autoRender = true;
	
	function index(){
		$this->set('title_for_layout', "フォームのテスト");
	}
	
	function receive(){
		$this->autoLayout = false;
		$this->set('title_for_layout', "フォームのテスト(結果)");

		var_dump($this->params);
		
	}
	
}
?>

ビューの作成

index.ctp

/app/views/test_formディレクトリにindex.ctpを作成する。selectボックスはmultiple(複数選択)できるようにしてみた。

<h1>CakePHPのサンプル</h1>
<p>
これはCakePHPのサンプル画面です。
</p>
<form method="post" action="./TestForm/receive">

<input id="input1" type="text" name="text1" /><br>
<input id="input2" type="password" name="text2" /><br>
<input id="input3" type="hidden" name="text3" value="hidden1"/><br>

<select id="select1" name="select1">
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
	<option value="4">4</option>
	<option value="5">5</option>
</select><br>

<select id="select2" name="select2[]" multiple>
	<option value="A">A</option>
	<option value="B">B</option>
	<option value="C">C</option>
	<option value="D">D</option>
	<option value="E">E</option>
</select><br>

<input id="radio1_1" type="radio" name="radio1" value="a">a
<input id="radio1_2" type="radio" name="radio1" value="b">b
<input id="radio1_3" type="radio" name="radio1" value="c">c
<input id="radio1_4" type="radio" name="radio1" value="d">d
<input id="radio1_5" type="radio" name="radio1" value="e">e
<br>
<input id="check1_1" type="checkbox" name="check1[]" value="あ"><input id="check1_2" type="checkbox" name="check1[]" value="い"><input id="check1_3" type="checkbox" name="check1[]" value="う"><input id="check1_4" type="checkbox" name="check1[]" value="え"><input id="check1_5" type="checkbox" name="check1[]" value="お"><br>
<input type="reset"> &nbsp;
<input type="submit">
</form>
receive.ctp

/app/views/test_formディレクトリにreceive.ctpを作成する。
内容は空でよい。

確認

以下の画面からPOSTしてみる。

結果は以下のページ。

POSTされたデータを含めて、paramsは

  • "controller"=> string(8) "TestForm"
  • "action"=> &string(7) "receive"
  • "named"=> array(0) { }
  • "pass"=> array(0) { }
  • "plugin" => NULL
  • "form"=> array(7) {
    • "text1" => string(9) "テスト"
    • "text2"=> string(0) ""
    • "text3"=> string(7) "hidden1"
    • "select1"=> string(1) "3"
    • "select2"=> array(2) { [0]=> string(1) "B" [1]=> string(1) "C" }
    • "radio1"=> string(1) "b"
    • "check1"=> string(3) array(2) { [0]=> string(3) "い" [1]=> string(3) "う" } }
  • "url"=> array(1) {
    • "url"=> string(16) "TestForm/receive" }

となっている。

$this->params["form"][パラメータ名]

で入力された値が取得できる。