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



我在一个名为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来实现这一点,但不是很好。

最新更新