Cakephp: Как сделать так, чтобы форма отображала переменные как переданные аргументы? - PullRequest
1 голос
/ 27 июля 2011

У меня есть действие под названием поиск на контроллере под названием категории./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')
    )
);

Эта форма содержит 1 поле ввода с именем q, и когда вы отправляете его, URL-адрес, на который вы перешли, выглядит примерно так:

/ search? q = your + search + дермы

Проблема в том, что это будет играть намного лучше с другими частями приложения, если это будет passedArg вместо get var.Таким образом, URL-адрес будет выглядеть следующим образом:

/ search / q: ваш% 20search% 20terms

Есть ли способ настроить форму для публикации таким образом?

Ответы [ 2 ]

3 голосов
/ 27 июля 2011

сначала, маршрутизатор:

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
   }
}
0 голосов
/ 27 июля 2011

Это никогда не будет работать без взлома JS, потому что именованные параметры являются частью URL.Целевой URL-адрес формы является статическим и не будет изменяться содержимым поля ввода.Вы можете сделать это с помощью JS-хака, но это не очень хорошо.

...