我在名为categories的控制器上有一个名为search的操作。 /categories/search
我也有这条路线:
Router::connect(
'/search',
array('controller'=>'categories','action'=>'search')
);
因此网址为/search
而不是/categories/search
我为该网址设置了get
的表单:
$form->create(
NULL,
array(
'type'=>'get',
'url'=>array('controller'=>'categories','action'=>'search')
)
);
此表单包含一个名为q
的输入字段,当您提交时,您将看到的URL看起来像这样:
/搜索Q =您+搜索+术语
问题是,如果应用程序的其他部分是passedArg
而不是get var,这将会更好。所以URL看起来像这样:
/搜索/ Q:你的%20search%20terms
无论如何将表单设置为像这样发布?
答案 0 :(得分:3)
首先是路由器:
Router::connect('/search', array('controller'=>'categories','action'=>'search')); Router::connect('/search/*', array('controller'=>'categories','action'=>'search'));
您可以使用重定向来获得漂亮的网址:
function search(){ if(!empty($this->params['url']['q'])){ $this->redirect(array('q'=>$this->params['url']['q'])); }else if(!empty($this->params['named']){ // search here } }
答案 1 :(得分:0)
如果没有JS hack,这将无法工作,因为命名参数是URL的一部分。 表单的目标URL是静态的,不会被输入字段的内容修改。 你可以用JS hack做到这一点,但不是很好。