名前付きでパラメータを受け取る方法
1.2系での話です。(バージョンはBeta 1.2.0.6311)
通常
PostsControllerのhogeメソッドにアクセスする時のURLは
http://localhost/posts/hoge
となります。
ここに何かしらのパラメータを渡そうとするとhogeメソッドに
<?php funcion hoge($param1 , $param2){ // 処理 } ?>
と引数を受け取れるように定義した上で
http://localhost/posts/hoge/10/20
というURLにアクセスすると、hogeメソッドの引数$param1に10、$param2に20がセットされます。
パラメータの数がいつも変わらなければこの方法で十分なのですが、パラメータの個数が不特定の場合に困ってしまいます。
そんな悩みを解消するのが次の方法です。
名前付きのパラメータとして受け取る方法
先ほどと同じお題でいくと
http://localhost/posts/hoge/param1:10/param2:20
というように、URLの後ろに"変数名:値"をつけると、コントローラーの変数$params['named'][変数名]に値が格納されます。
コントローラー内では
<?php $this->params['named']['param1']; // 値は10 $this->params['named']['param2']; // 値は20 ?>
といった風にアクセスできます。
この方法の場合、hogeメソッドでは引数の定義が必要なくなります。
下の例のようにデフォルト値を定義しておいてマージすると良いかと思います。
<?php funcion hoge(){ $defaults = array('param1'=> 0, 'param2'=> 0, 'param3'=> 0, ...); $p = array_merge($defaults, $this->params['named']); // 処理 } ?>
この方法はページネーションのページ番号/ソート項目/ソート順などのパラメータの受け取り方に使われています。
パラメータの個数・順番などに関係なくメソッド側で柔軟に対応できるので、この方法が便利なシーンもあるかと思います。
ちなみに
http://localhost/posts/hoge/param1:10/30/param2:20
といった感じで任意の場所に"値のみ"をURLに書いた場合、コントローラーの変数$params['pass'][0からの連番]に値が格納されます。
また、$params['pass']と$params['named']をマージしたものが、コントローラーの変数$passedArgsにセットされるようです。