[CakePHP2] CakeRequestでデータ受け取り

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も取れる。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>