cakephp Как я могу преобразовать переданные параметры в именованные параметры для предварительного заполнения формы элемента?

Я использую CakePHP версии 2.2.3. У меня есть элемент с окном поиска и несколькими раскрывающимися списками, которые используют поисковый плагин CakeDC. Он прекрасно работает и просто передает выбранные / найденные элементы в URL, например, www.mydomain.com/products/cid:1/mid:3/terms:these%20terms, где cid - это идентификатор категории, а mid - идентификатор производителя.

Я создал страницы, которые позволяют вам щелкнуть категорию, чтобы найти все товары в этой категории, но я не могу получить поле выбора категории в элементе, чтобы выбрать категорию страницы, на которой он находится. Это работает, если я использую ту же структуру URL, что и мой элемент, но мне нужен чистый URL для SEO, поэтому я настраиваю следующий пользовательский маршрут:

/**
* 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]+'
    )
);

это приводит к красивому URL, но предварительно не выбирает значение моего списка выбора.

Я смог заставить его работать с кодом ниже в моем элементе, но это кажется "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 не имеет никакого эффекта

Я полагаю, что плагин автоматически устанавливает выбранное значение, если использует именованные параметры, если только это не поведение торта по умолчанию. Как я могу преобразовать переданные параметры в именованные, или я могу заставить свой плагин использовать переданные параметры?

вывод из 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 ответов

Другие вопросы по тегам