我在一个名为categories的控制器上有一个名为search的操作。/categories/search
我也有这个路由:
Router::connect(
'/search',
array('controller'=>'categories','action'=>'search')
);
URL是/search
而不是/categories/search
我有一个窗体设置为get
的url:
$form->create(
NULL,
array(
'type'=>'get',
'url'=>array('controller'=>'categories','action'=>'search')
)
);
这个表单包含一个名为q
的输入字段,当你提交它时,你被带到的URL看起来就像这样:
问题是,如果它是/搜索?q = +搜索+条件
passedArg
而不是get变量,那么它将与应用程序的其他部分更好地配合。/搜索/问:% 20搜索% 20项
有没有办法把表单设置成这样?
首先,路由器:
Router::connect('/search', array('controller'=>'categories','action'=>'search')); Router::connect('/search/*', array('controller'=>'categories','action'=>'search'));
你可以使用重定向来获得漂亮的url:
function search(){ if(!empty($this->params['url']['q'])){ $this->redirect(array('q'=>$this->params['url']['q'])); }else if(!empty($this->params['named']){ // search here } }
如果没有JS hack,这将永远无法工作,因为命名参数是URL的一部分。表单的目标url是静态的,不会被输入字段的内容修改。你可以通过JS hack来实现这一点,但不是很好。