Cakephp:如何使表单获取变量显示为传递的args?

时间:2011-07-27 14:52:51

标签: cakephp cakephp-1.3

我在名为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

无论如何将表单设置为像这样发布?

2 个答案:

答案 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做到这一点,但不是很好。