PHPのスーパーグローバルの値をどのように参照すれば良いかまとめてみました。
Controller#dataやアクションメソッド引数のようにフレームワークで想定された使い方をしている分には特に問題無いのですが、ちょっと他のことをやろうとすると、どこに値が格納されているか分からず困った事がありました。
# もちろん$_GET/$_POSTを使えば値は取れますが、せっかくのフレームワークなのでなるべくその中で値を使いたいものです。
1. $_GET
$_GETの値はController#params['url']に格納されます。
ちなみに$_GET['url']はURLルーティング(リクエストURIからコントローラ・モデル等を決定)で、$_GET['file']は[app/webroot/js/vendors.php]で参照されています。
[http://example.com/foo/index/?id=1&code=abcd&offset=10]でアクセス
-
<?php
-
class FooController extends AppController {
-
function index() {
-
// $this->params['url']['id'] => 1
-
// $this->params['url']['code'] => 'abcd'
-
// $this->params['url']['offet'] => 10
-
}
-
}
-
?>
2. $_POST
$_POSTの値はController#params['form']に格納されます。
なお中でも$_POST['data']は特別で、Controller#data/Controller#params['data']にも格納されます。
[id=1&name=abcd&comment=Hello!!&data[Foo][name]=Bar]をPOST
-
<?php
-
class FooController extends AppController {
-
function index() {
-
// $this->params['form']['id'] => 1
-
// $this->params['form']['name'] => 'abcd'
-
// $this->params['form']['comment'] => 'Hello!!'
-
-
// 以下3つは同じ
-
// $this->params['form']['data']['Foo']['name'] => 'Bar'
-
// $this->params['data']['Foo']['name'] => 'Bar'
-
// $this->data['Foo']['name'] => 'Bar'
-
}
-
}
-
?>
3. $_COOKIE
$_COOKIEの値を参照する方法は用意されていません。もし$_COOKIEの値を使用する場合は直接参照するしかないようです。
ちなみにフレームワーク側はCakeSessionクラスがこの値を参照しています。
4. $_FILES
$_FILESはおおよそ$_POSTと同様にキーによって格納される場所が異なります。
まず$_FILES['data']以外の箇所についてですが、これは$_POSTと同じようにController#params['form']に格納されます。
つぎに$_FILES['data']ですが、こちらは$_POST['data']と同じようにController#data/Controller#params['data']に格納されます。ここでは$_FILES['data']がそのまま格納されるわけではなく、下のソースのように[$model][$field][$key]の連想配列に値を格納されます。
[cake/dispatcher.php:340]
-
foreach ($_FILES['data'] as $key => $data) {
-
-
foreach ($data as $model => $fields) {
-
-
foreach ($fields as $field => $value) {
-
$params['data'][$model][$field][$key] = $value;
-
}
-
}
-
}
-
}
$_POST['data']の場合と異なり、$_FILES['data']の値はController#params['form']には格納されません。
なお、$_FILESの格納処理は$_POSTの値が格納された後に行われます。つまり$_POSTと$_FILESが同じキーを持つ値は$_FILESの値で上書きされてしまいますのでご注意を。
5. $_ENV/$_SERVER
$_ENV/$_SERVERの値は[cake/basics.php]にあるenv()関数で参照できます。
どちらの変数にも同じキーで値がある場合は、$_SERVERの値が優先され、次に$_ENVの値になります。双方に該当するキーが無い場合はgetenv()の値が返ります。(全てのキーが無ければnullが返ります。)
6. $_REQUEST/$_GLOBALS
$_REQUEST/$_REQUESTの値は特に参照する方法は用意されていません。フレームワークでも参照している箇所は見当たりませんでした。
- Newer: CakePHP モデルのvalidates()に注意
- Older: Twitterで暇つぶし
トラックバック:0
- このエントリーのトラックバックURL
- http://www.1x1.jp/blog/2007/04/cakephp_php_superglobals.html/trackback
- Listed below are links to weblogs that reference
- CakePHP $_GET/$_POSTの値はどこに? from Shin x blog
