2017-05-11 54 views
7

我試圖讓我的CodeIgniter應用程序與WordPress類似。在CodeIgniter中爲(:any)路由

我希望能夠讓這些類型的網址:

http://www.example.com/my-post-example

http://www.example.com/new-headline-here

http://www.example.com/i-love-stackoverflow

我的路由:

$route['(:any)'] = "core/index/$1"; 

它將調用我的核心控制器並將頁面名稱傳遞給索引函數。

然後,我在我的數據庫中查找頁面名稱並將頁面顯示給用戶。到現在爲止還挺好。

但是,有時我會打電話給另一個控制器。例如:

http://www.example.com/admin/edit_page/3

http://www.example.com/admin/settings

現在我認爲我的路線只會抓住所有這些規則,並將它們發送到我的核心控制器。有沒有辦法爲特定頁面設置例外?或者是在我的Core控制器內執行此檢查是一個好主意。

例如,

if ($page not in DB) { 
    // Call controller/method 
} 

這似乎有點多餘,因爲我只想笨來處理這個問題。

回答

4

您使用它的路由規則可以滿足您的需求。

如果使用http://www.example.com/admin/edit_page/3這個鏈接它會送你admin控制器和edit_page method.It不會使用路由any規則。

然而,你會得到一個問題,如果你的鏈接看起來像這樣

http://www.example.com/my-post-example/test 

它會嘗試去my-post-example控制器和測試方法。

再次http://www.example.com/admin將使用路由any規則,意味着它將重定向到核心控制器而不是admin/index。在這種情況下,您的網址應爲http://www.example.com/admin/index

最後如果你打電話給你帶控制器/方法名其他環節我們會根據您any規則

+0

由於是OK!有沒有辦法匹配任何URL模式?包括/?所以管理員/編輯/大聲笑/會去核心/索引呢?或者我必須一直添加(:any)/(:any)/(:any)? – Oliwol

+0

在你的'$ route ['(:any)'] =「core/index/$ 1」之前增加另一個規則;'rule'$ route ['admin/edit/lol'] =「core/index」;' –

+0

如果我想將任何數據路由到該函數,如:admin/edit/lol => core/index以及admin/new/test => core/index。有沒有比添加每個規則更好的方法?像路由['admin /(:any)/(:any)'] - 但有可能將第3,第4和第5增加到無限。 – Oliwol