CakePHP2で投げられるデータの受け取り方は何種類かある。
例として使用している受け取りコントローラーは以下のような物とする。
1 2 3 4 5 |
class RequestTestController extends AppController { public function index() { debug($this->request->data); } } |
■Postした場合
アクセスHTML:
1 2 3 4 5 |
<form action="/request_test/index" method="POST"> <input type="text" name="Hoge" value="Moge"/> <input type="text" name="Foo" value="Bar"/> <input type="submit"> </form> |
コントローラー取得:
1 |
debug($this->request->data); |
1 2 3 4 |
array( 'Hoge' => 'Moge', 'Foo' => 'Bar' ) |
■Getした場合
アクセスURL:
1 |
/request_test/index?hoge=moge&foo=bar |
コントローラー取得:
1 |
debug($this->request->query); |
1 2 3 4 |
array( 'hoge' => 'moge', 'foo' => 'bar' ) |
■URLの後ろにスラッシュ(/)でひっつけた場合
アクセスURL:
1 |
/request_test/index/hoge/moge/foo/bar |
コントローラー取得:
1 |
debug($this->request->pass); |
1 2 3 4 5 6 |
array( (int) 0 => 'hoge', (int) 1 => 'moge', (int) 2 => 'foo', (int) 3 => 'bar' ) |
■ URLに名前付き引数で渡した場合
アクセスURL:
1 |
/request_test/index/hoge:moge/foo:bar |
コントローラー取得:
1 |
debug($this->request->named); |
1 2 3 4 |
array( 'hoge' => 'moge', 'foo' => 'bar' ) |
ちなみに、 namedやpathは、以下のように配列名でアクセスもできる。
1 2 |
debug($this->request['named']); debug($this->request->params['named']); |
が、個人的には配列名でのアクセスは使わないかな・・。
■HTTPリクエストのBodyに何か書き込まれている場合
アクセスHTML:
Postと同じHTMLとする。
コントローラー取得:
1 |
debug($this->request->input()); |
1 |
'Hoge=Moge&Foo=Bar' |
この例では、PostのBodyを見ているだけだが、REST等でbodyにJSONが書かれている場合は、下記のように受け取れる
1 |
$this->request->input('json_decode'); |
■組み合わせ
ちなみに、組み合わせることもできる。
アクセスHTML:
1 2 3 4 5 |
<form action="/request_test/index/hoge:moge/foo/bar?hello=world" method="POST"> <input type="text" name="Hoge" value="Moge"/> <input type="text" name="Foo" value="Bar"/> <input type="submit"> </form> |
この場合、pathもqueryもnamedもdataも取れる。