2012-09-20 109 views
1

我目前正在將一個網站從WordPress移植到CakePHP,並且我在使用WP版本時遇到了其中一個路由問題。使用GET參數的CakePHP路由

我必須路由http://example.com/?specific_key=valuehttp://example.com/controller/action,但我找不到一個方法來捕獲與默認主頁路由捕獲它的網址。

任何意見或指針非常感謝。

謝謝!

回答

4

嘗試將以下內容添加到路線文件的頂部。檢查參數是否設置了值並將'/'連接到需要路由到的位置。這樣它將在頁面控制器路由之前匹配你的路線。

if (isset($_GET['specific_key']) && $_GET['specific_key'] === 'value') { 
    Router::connect('/', array(whatever controller/action you need)); 
} 

// the rest of your routes 

你也可以在你的htaccess文件創建一個重寫規則吧:

RewriteCond %{QUERY_STRING} ^specific_key=value$ [NC] 
RewriteRule//controller/action? [R=301,L] 

第三個選擇:使用自定義路由類:https://gist.github.com/3763800

創建文件APP/Lib/Route/QueryStringRoute.php,把內容上面的鏈接。

在你的路由

然後做:

App::uses('QueryStringRoute', 'Route'); 
Router::connect('/', array('controller' => 'your_controller'), array(
    'routeClass' => 'QueryStringRoute', 
    'query' => array('specific_key' => 'value') 
)); 

再次,這將需要你的家的路線了。

編輯:增加了第三個選項。

+0

條件完美的工作,非常感謝!我希望我有足夠的聲望投票給你,如果有人看到這個,請給@tigrang一些投票!再次感謝! :d –

1

根據GET參數設置路由是不可能的。

編輯:至少使用內置的CakeRoute類。

+0

我看到...所以我的解決方法是從應用程序控制器調用操作方法(因爲我將'/'路由到'/ app/index'),但我無法通過調用它來訪問Controller,我如何訪問它?這是一個很好的選擇嗎? –

+0

AppController本質上是一個抽象類。你不能直接引用它。試試下面的@tigrang建議。 – ADmad