1

OK、間違ったアプローチを取っているかどうかはわかりませんが、ここで立ち往生しています...

私たちはウェブサイトを開発し、IDと特別な変数を期待する多くのコントローラーがあり、リンクはすでに期待されるものを渡すコントローラーにリダイレクトされています。

新しい要件は、friendlyUrlsを使用することであり、そのアイデアは、次の代わりに次のことを行うことです。

http://domain.com/search/advanced/term:head/city:/set:show-all/sort:basic-relevance

今それは読む

http://domain.com/search/head

またはオプションを渡します。

http://domain.com/search/in-edinburgh-scotland/by-rating/head

私の考えは、Routes.phpの最初に、次のような単純なものを用意することでした。

    $friendlyUrl = $_SERVER['REQUEST_URI'];
    $friendlyUrl = split('/', $friendlyUrl);
    foreach ($friendlyUrl as $key => $params) {
        if(empty($params)){
            unset($friendlyUrl[$key]);
        }
        if($params == 'search'){
           Router::connect('/search/*', array('plugin'=>'Search','controller' => 'Search', 'action' => 'advancedSearch', 'term'=>'head));

        }elseif ($params == 'employers') {
            # code...
        }elseif ($params == 'employer-reviews') {
            # code...
        }elseif ($params == 'jobs') {
            # code...
        }
    }

それはうまくいきませんでした、それから私は私のAppControllerに似たようなものを追加しようとしましたが何もしませんでした。

全体として、しなければならないことは次のとおりです。

  • URLは次の形式になります:/ search / {term}
  • 実際には次の場所にリダイレクトされます:/ search / Advanced / {term} / city:{optional} / set:show-all / sort:basic-relevance
  • 読み続けるためのURLバー:/ search / {term}

誰かアイデアがありますか?!ありがとうございました

4

1 に答える 1

2

あなたは間違いなく本のルーティングページを見たいです

http://book.cakephp.org/2.0/en/development/routing.html

コントローラーにパラメーターを渡すためにURLパターンを一致させるためのオプションがたくさんあります。

Router::connect(
'/search/:term', 
array('controller' => 'search', 'action' => 'advanced'),
array(
    'pass' => array( 'term')
)
);

おそらく、都市のデフォルトを設定し、アクション関数のパラメーター定義を設定して並べ替える必要があります。

public function advanced($term, $city='optional', $sort = 'basic'){
     // your codes
}

この方法でそれを行うことの素晴らしいところは、$ this->Html->linkが生成するパスのルートを反映することです。(逆ルーティング)

ケーキのルートは非常に強力です、あなたはそれらでいくつかのまともなフレンドリーなURLを得ることができるはずです。私が使用したもう1つの追加機能は、動作(slugable)を使用して、コンテンツアイテムのタイトルからcms内のページ/コンテンツタイプの検索可能なフィールドを生成することです。

幸運を!

于 2013-02-26T04:59:15.083 に答える