cakephp如何将传递的参数转换为命名参数以预填充元素形式?

时间:2014-01-23 05:57:24

标签: cakephp cakephp-2.0 parameter-passing named-parameters cakephp-search-plugin

我正在使用CakePHP版本2.2.3我有一个带搜索框的元素和一些使用CakeDC搜索插件的下拉列表。它工作得很好,只需传递URL中的选定/搜索项目,如www.mydomain.com/products/cid:1/mid:3/terms:these%20terms,其中cid是类别ID,mid是制造商ID。

我创建的页面允许您单击某个类别以查找该类别中的所有产品,但我无法在元素中获取类别选择框以选择其所在页面的类别。如果我使用与我的元素提交相同的URL结构,但我想要一个干净的SEO的URL,所以我设置以下自定义路线:

/**
* Categories
*/
Router::connect(
    '/products/category/:cid-:slug', // E.g. /products/category/3-my_category
        array('controller' => 'products', 'action' => 'category'),
        array(
            'pass' => array('cid', 'slug'),
            'cid' => '[0-9]+'
    )
);

这会产生漂亮的网址,但不会预先选择我的选择列表的值。

我能够在我的元素中使用下面的代码,但它似乎“hacky / clunky”

if(isset($this->params['named']['cid']) && !empty($this->params['named']['cid'])){
                echo $this->Form->input('cid', array('label' => false, 'default' => $this->params['named']['cid'], 'options' => $categories, 'empty' => ' ( Category ) '));
            }elseif(isset($this->params['pass']['0']) && !empty($this->params['pass']['0'])){
                echo $this->Form->input('cid', array('label' => false, 'default' => $this->params['pass']['0'], 'options' => $categories, 'empty' => ' ( Category ) '));
            }else{
                echo $this->Form->input('cid', array('label' => false, 'options' => $categories, 'empty' => ' ( Category ) ')); 
                    }

另外,在我的控制器中我试过这个:

$this->params['named']['cid'] = $this->params['pass']['0'];

但是我收到了这个错误:间接修改CakeRequest的重载元素没有效果

我相信如果使用named params,插件会自动设置所选值,除非这是cake的默认行为。 如何将传递的参数转换为命名参数,还是可以强制插件使用传递的参数?

var_dump的输出($ this-> $ params):

object(CakeRequest)[9]
public 'params' => 
array
  'plugin' => null
  'controller' => string 'products' (length=8)
  'action' => string 'category' (length=8)
  'named' => 
    array
      empty
  'pass' => 
    array
      0 => string '2' (length=1)
      1 => string 'This_and_that' (length=13)
  'cid' => string '2' (length=1)
  'slug' => string 'This_and_that' (length=13)
public 'data' => 
array
  empty
public 'query' => 
array
  empty

由于

0 个答案:

没有答案