LoginSignup
109
98

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-01-07

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'
  )
)
109
98
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
109
98