cakephpでhttp_build_query使う時の&(アンパサンド)

今日は福岡でWordCamp Fukuoka開催です。
WordCamp Fukuoka 2011
残念なことに私は行く事が出来ないので、色んなレポート記事が上がるのを楽しみにしつつ、こうしてCakePHPを触るのです。。。泣かない。

というワケで、Cakeです。
今回はPHPにある「http_build_query()」を利用した際に、ちょこっと気付いた事がありました。
PHP: http_build_query - Manual

連想配列からクエリー文字列を生成してくれる便利なhttp_build_query()

http_build_query() は便利関数です。
この引数に連想配列渡すと、クエリー文字列に変換してくれます。

$array(
	'hoge1' => 1
	'hoge2' => 2
	'hoge3' => 3
);
$query = http_build_query($array);

var_dump($query) すると hoge1=1&hoge2=2&hoge3=3
「&」アンパサンドは、第3引数(区切り文字列を指定)に指定がなければデフォルトで適用されます。
便利ですね!

で、これをそのままCakeで使ってみると、&が「&」に変換されてしまいました。
&はそのまま利用したいので、これは困った(´・ω・)
なので、第3引数に指定。

http_build_query($array, NULL, '&');

これでそのまま使う事が出来ました。やったー!

ただし、PHPマニュアルページのコメントにあるように、アンパサンドの取扱いには幾つか留意点があるみたいです。
動作が異なる場合は、色んなやり方を試してみないと判りませんね。

引数に指定が要らないメソッド

通常、コントローラでは引数でパラメータ渡します。
function hoge($hoge, $hoge2) みたいな感じですね。
ところが、この引数の数が決まってない場面、引数を可変したい場面で使えます。

Cakeでは、引数からコントローラに入ってくる値がこのようになります。
以下のURLを例にしてみます。
http://address/controller/hoge1:1/hoge2:2

function controller() には以下のように入って来ます。
$this->params['named']['hoge1'];
$this->params['named']['hoge2'];

namedをキーとした連想配列ですね。
なので、これをそのまま http_build_query($this->params['named']) に渡すと。。。
hoge1=1&hoge2=2

これはなんという楽チンさ!
引数の要らないメソッドで行けますね。可変どんと来い丶(・ω・)ノ

ついでにキー値の判定

とりあえず話は終りなんですが、ついでに特定のキーを判定したい時。
array_key_exists() 使います。もしくはCakeの場合 Set::check()。

if(array_key_exists('hoge2', $array)) {
	Set::remove($array, 'hoge2');
}

キーに hoge2 が存在する時は、そのhoge2キー値を削除。。。とか。

あとがき

コントローラをもそもそ触っていて、引数の数がとんでもない事になった上、可変する!?という状況に当ってしまいました。
それで、なんとか出来ないかなぁ?と考えてる時に、paramsの存在を思い出したので良かったです。

URLに Key:値 とすればそのまま引き込んでくれるとか、やっぱりCakeはすごいですね(^ω^)

▲ to Top

トラックバック(0)

▲ to Top