質問: CakePHP(1.3.6)でサイトを作っている初心者です。 下記の仕様で作成しているのですが、 1.一覧をクリックするとデフォルトで今月の発売商品の一覧を表示 2.セレクトボックスで西暦+月のリストから発売月を選択し、発売商品の一覧を表示 1.の場合には、 $html->link("一覧", array('controller' => 'items', 'action' => 'list', date("Y") . date("m")), array('escape' => false), false, false); で、urlが希望通り items/month/201210 となります。 2.の場合には、 $form->create('item',array('type'=>'post', 'url' => array('action'=>'./list'))); $form->select('ym',array($selectym), null, array('empty'=>'発売年月[選択]')); $form->submit("/img/search.png", array('class' => "", 'name' => 'nengetu')); $form->end(); で、選択した年月の商品一覧は表示できるのですが urlがitems/month/ となります。 このurlを 1.と同様の items/month/yyyymm として表示させたいのです。 params['pass']に書き込んだりしたのですが、表示できず悩んでおります。 解決する方法をお知りの方は、ぜひお教えください。 よろしくお願いいたします。
回答: 手っ取り早いのは、Cakeの仕組みから離れて、JavaScriptで、selectボックスの変更イベントを拾って、formのactionを書き換えてあげればいいかと。 逆に言うと、Cakeの仕組みだけではできません。やるとすれば、items/month/にアクセスされた際に、そのような状態だとリダイレクトしてやるとかしかないかと。おおよそ、次のような感じですかね。 ``` class ItemsController { function list($ym = null) { if ($ym == null && !empty($this->data['Item']['ym'])) { $this->redirect(array('action' => 'list', $this->data['Item']['ym'])); exit; } ・・・以下、検索など・・・ } } ``` 余談ですが、 > $html->link("一覧", array('controller' => 'items', 'action' => 'list', date("Y") . date("m")), array('escape' => false), false, false); > > だと、items/month/201210ではなく、items/list/201210ですよね?