【CakePHP】リクエストの取得方法

  • 71
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

POSTメソッドのBODYデータ

$this->requestのdataメソッドまたはdataプロパティでアクセスできる。
dataプロパティだとnullチェックが必要なので、dataメソッドで取得した方がシンプル。

html
<input type='text' name='data[User][id]' value='1'>
<input type='text' name='data[User][name]' value='suzuki'>

取得の際に、nameの先頭のdataという文字列は取り除かれる。
ドットつなぎでアクセスすることができる。該当データがない場合はnullが返る。
※実はdata()はdataプロパティへのアクセスをHash::get()で行っているだけ。

dataメソッドでのアクセス
$id = $this->request->data('User.id');
//=>1
$name = $this->request->data('User.name');
//=>suzuki
$user = $this->request->data('User');
/*
[
'id'=>'1',
'name'=>'suzuki'
]
*/

ドットつなぎは数値でも有効。

html
<input type='text' name='user[]' value='7'>
<input type='text' name='user[]' value='8'>
<input type='text' name='user[]' value='9'>
$id = $this->request->data('User.2');
//=>9

※dataプロパティだとnullの場合にエラーが出るので、nullチェックが必要になる。

dataプロパティでアクセス
if(isset($this->request->data['User']['id'])){
  $id = $this->request->data['User']['id'];
}

GETメソッドのクエリストリング

※POSTメソッドのクエリストリングの値も同様の方法で取得できる。

urlが /posts/index?page=1&sort=titleの場合。

$this->requestのqueryメソッド(CakePHP 2.3以降)またはqueryプロパティでアクセスできる。
queryプロパティだとnullチェックが必要なので、queryメソッドで取得した方がシンプル。

queryメソッドでのアクセス
$page = $this->request->query('page');

※queryプロパティだとnullの場合にエラーが出るので、nullチェックが必要になる。

queryプロパティでアクセス
if(isset($this->request->query['page'])){
  $page = $this->request->query['page'];
}

nameとの対応詳細

[]とするとシーケンスが入るっぽい。

name=hoge

<input name=hoge>
'hoge'=>'入力した値1'

//data['hoge']で取得

name=hoge[]

<input name=hoge[]>
<input name=hoge[]>
'hoge' => array(
  (int) 0 => '入力した値1',
  (int) 1 => '入力した値2'
)
//data['hoge'][0]で取得。
//もしくは
//foreach(data['hoge'] as $v){
//で取得。

name=hoge[][]

<input name=hoge[][]>
<input name=hoge[][]>
'hoge' => array(
  (int) 0 => array(
    (int) 0 => '入力した値1'
  ),
  (int) 1 => array(
    (int) 0 => '入力した値2'
  )
)

name=hoge[fuga][]

<input name=hoge[fuga][]>
<input name=hoge[fuga][]>
'hoge' => array(
  'fuga' => array(
    (int) 0 => '入力した値1',
    (int) 1 => '入力した値2'
  )
)

name=hoge[][文字列]

<input name=hoge[][fuga]>
<input name=hoge[][fugafuga]>
'hoge' => array(
  (int) 0 => array(
    'fuga' => '入力した値1'
   ),
   (int) 1 => array(
    'fugafuga' => '入力した値2'
   )
)

name=hoge[シーケンス][文字列]

save($this->request->data['hoge']);で保存可能な形式となっている。

<input name=hoge[0][fuga]>
<input name=hoge[0][fugaguga]>
<input name=hoge[1][fuga]>
<input name=hoge[1][fugaguga]>
'hoge' => array(
  (int) 0 => array(
    'fuga' => 'fasfa',
    'fugafuga' => 'fdsafda'
  ),
  (int) 1 => array(
    'fuga' => 'asfsadf',
    'fugafuga' => 'afdsaf'
  )
)