2013-04-02 38 views
0

exmple:此負載默認控制器/與功能page類,負載控制器

www.example.com/page 

,除非我們已經控制器/類命名爲page,並設置$route['page'] = 'page';它會載入控制器。但是如果我們不設置$route,它仍然會加載default_controller。

是真的嗎?controller必須總是有$route['']?是不是可以加載控制器page沒有設置$route['']即使沒有默認的控制器功能同名?

編輯:

我訪問

www.mysite.com/index.php/user 

我有user控制器index功能,但我的路由文件只包含:

$route['default_controller'] = 'page'; 
$route['(:any)'] = 'page/$1'; 
$route['product'] = 'product'; 
//$route['user'] = 'user'; 
$route['404_override'] = ''; 

回報404,僅工程如果我取消註釋:$route['user'] = 'user';

爲什麼?

謝謝。

回答

1

不,這是不正確的。笨,默認情況下,directly maps URI segments到:

example.com/index.php/controller/method/param/param/... 

或者,如果你有一個.htaccess /類似的解決方案刪除的index.php:當你想使用,做了URL

example.com/controller/method/param/param/... 

Routing使用不直接映射到這個約定。

編輯:您有衝突的路線。 CodeIgniter將按照從上到下的順序查看每條路線,如果找到匹配的路線,它將停止查看並處理該路線。因爲你有一個(:any)全路徑,它將匹配任何東西(就像它說的)。

經驗法則是首先放置最具體的路線,然後獲得更具通用性和更全面的路線。您的(:any)路線應該是列表中最後一個。而默認的控制器和404覆蓋應該保持在第一位。

$route['default_controller'] = 'page'; 
$route['404_override'] = ''; 

$route['product'] = 'product'; 
$route['user'] = 'user'; 
$route['(:any)'] = 'page/$1'; 

您需要添加,因爲你已經定義了(:any)路線productuser路線。如果要避免爲每個現有控制器編寫路由規則,但仍要利用全部控制器,請考慮使用控制器/方法。你可以做你的驗證來檢查URI是否在那裏有效。只要確保404錯誤不存在(您可以使用show_404()),因爲任何不存在的URL都將被路由到那裏。

+0

請看看我的編輯。不管怎麼說,還是要謝謝你。 – egig

+0

您有衝突的路線,需要定義每個現有的控制器。 –