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"> <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"][パラメータ名]
で入力された値が取得できる。