2011-07-27 10 views
1

カテゴリと呼ばれるコントローラの検索というアクションがあります。 /categories/searchCakephp:フォーム変数を取得する方法は、渡されたargsとして表示されますか?

私はまた場所でこのルートを持っている:

Router::connect(
     '/search', 
     array('controller'=>'categories','action'=>'search') 
    ); 

だからURLは、私はそのURLのgetに設定フォームを持っている/search代わりの/categories/search

です:

$form->create(
    NULL, 
    array(
     'type'=>'get', 
     'url'=>array('controller'=>'categories','action'=>'search') 
    ) 
); 

このフォームにはqという1つの入力フィールドが含まれています。 ?ちょうどこのようなルックスに取らRE:

/検索Q =あなたの+検索+用語

問題は、それが代わりにpassedArgた場合、これはアプリケーションの他の部分と非常に良く遊ぶでしょうですget varのだから、URLは次のようになります。

/検索/ Q:あなた%の20searchの%の20terms

は次のように投稿するためのフォームを設定するには、とにかくはありますか?

答えて

3

まず、ルータ:

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

+1 [PRG](http://stackoverflow.com/questions/1459845/insert-cakephp-post-params-into-url/1462494#1462494) – deizel

+0

ありがとう、これは自分自身にも来ていた結論です。 –

0

名前付きパラメータがURLの一部であるため、これはJSハックなしではうまくいきません。 フォームのターゲットURLは静的であり、入力フィールドの内容によって変更されません。 JSハックでこれを行うことはできますが、あまりうまくいきません。

+0

うん、私はJSを使用する必要はありません。私がこれをやりたいのは、検索結果に改ページがあるからです。ページ番号をクリックすると、すべての 'passedArgs'が(PaginationHelperによって使用されているかどうかに関わらず)保持されますが、GET変数は失われます。 –

関連する問題