[CakePHP]URLからパラメータを受け取る

cake記法?で書かれたURLからパラメータを取得するメモ。

コントローラーのみで制御

cakephpでのURLの基本は以下。

コントローラー名/アクション名

これにパラメータをつけたければ、その後ろに並べるのみ。

コントローラー名/アクション名/パラメータ1/パラメータ2

このパラメータを取得する方法は以下。

//URL - ctrl/act/param1/param2

$this->params['pass'][0]; //param1
$this->params['pass'][1]; //param2

で、指定の名前を付けたい場合は、以下のように。

コントローラー名/アクション/パラメータ名1:パラメータ/パラメータ名2:パラメータ

//URL - ctrl/act/param1:hoge/param2:fuga

$this->params['named']['param1'];
$this->params['named']['param2'];

で、View側でこのリンクを作る方法は以下。

1
2
3
4
5
<?php echo $this->Html->link('リンクテキスト', array(
  'controller' => 'ctrl',
  'action' => 'act',
  'param1' => 'hoge'
)) ?>

これで上記の、/ctrl/act/param1:hogeが生成される

ルーティング

このままだとURLが冗長になるので、ルーティングを設定して、スッキリさせる。
さらに予めパラメータ名を指定してやる。

ルーティング

Router::connect('/ctrl/act/:param1', array('controller' => 'ctrl', 'action' => 'act'));

こうすると、上記で記述したリンクを貼ると、以下のURLが生成される。

/ctrl/act/hoge

これを取得するには以下。

$this->params['param1']

これの方が見た目も取得方法もすっきりしててよさげ。

参考

http://creazy.net/2009/05/cakephp_routing.html

   このエントリーをはてなブックマークに追加