February 25, 2013
[CakePHP]コントローラに引数として記号を渡す
また備忘録的cakePHPメモ。
商品一覧があって、そこから商品詳細に飛びたい。
カテゴリ = car
商品ID = 25
カテゴリ = car/subaru
商品ID = 32
変数に「/」があるパターンとないパターンが混在している場合。
1件目は詳細画面へのリンクを http://localhost/index/detail/car/25 として、コントローラ側で function detail($category = null,$sid = null) … で $category = "car"; $sid = "25"; と取得可能。
2件目も同様にリンクをはると、 http://localhost/index/detail/car/subaru/25 先ほどのfunctionでは当然ながら第2引数として「car」を取得してしまう。
http://localhost/index/detail/car%2Fsubaru/25 として、カテゴリの部分にエンコードかけてもダメ(404になった)。
だから、各コードにエンコードかけてGETパラメータで渡すことにした。
http://localhost/index/detail/?category=car%2Fsubaru&sid=32
コントローラ側で
function detail() …
if($this->params['url']['category']){ $cat = $this->params['url']['category']; }
if($this->params['url']['sid']){ $sid = $this->params['url']['sid']; }
とすれば1件目も2件目もパラメータを取得可能で、 あとは適宜変更してDB等に問い合わせればOK。