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