2016-05-17 65 views
0

我有一個CI設置,其中URL可能會調用特定的控制器,或者應該轉發到沒有這樣的控制器存在的總線控制器。在switch語句中有類似default。例子:代碼點火器:未路由的請求的默認控制器

domain/real-controller   //<-- handled by controllers/Real-controller.php 
domain/another-real-controller //<-- controllers/Another-real-controller.php 
domain/foobar     //<-- no such controller; forwarded to a catch-all 

我知道改線的,但我不能做

$route['(:any)'] = 'catchall_controller' 

,因爲這會(大概)塊到多個請求合法控制器。

我大概可以用404處理做一些黑客行爲,但我想知道是否有更好的方法。 任何人都知道嗎?

+0

爲什麼不是''route ['default_controller'] = catchall_controller';'? – splash58

+0

正在使用,以確保前往'www.domain'加載主頁。我想我可以設置一個全部的默認控制器,如果沒有參數傳遞,加載主頁。只是在這裏大聲思考。 – Utkanos

+0

您使用的是什麼版本的Codeigniter? – CodeGodie

回答

0

你可以使用$route['(:any)'] = 'catchall_controller'但你必須把它放在你的routes.php文件的末尾:)。

因此,每個其他路由器/控制器都可以在到達具有您的catchall_controller的最後一行之前完成。

+0

我想這可能不是他想要的。重點不在於創建完整的路線列表,只需要一個「默認」或「全部捕捉」路線。 – CodeGodie

+0

謝謝你的幫助。不過,我同意評論者的意見。 – Utkanos

0

在codeigniter 2中,(:any)適用於所有參數,但在codeigniter 3中這是變化的。改變你的路線爲:

$route['(.*)'] = 'catchall_controller'; 
+2

爲什麼這個工作?提供解釋。這與$ route ['(:any)']'有什麼不同? – CodeGodie

+1

在codeigniter 2中(:任何)工作的所有參數,但在codeigniter 3這是變化 看到在這裏通過周長http://stackoverflow.com/questions/37111876/unlimited-parameters-get-last-one/ 37113315#37113315 –

+0

謝謝你的幫助。 – Utkanos

2

由於這個控制器是一個「全部抓住」,那麼它幾乎是在做一個404頁面。在這種情況下,您可以在您的路線中執行此操作:

$route['default_controller'] = 'welcome'; 
$route['404_override'] = 'catchall_controller'; 
$route['translate_uri_dashes'] = TRUE; 
+1

但仍然會發送404頭,但?我通過讓一個「網守」默認控制器跳轉到主頁*繞過了這個問題,除非*令牌被通過了。 +1,但。 – Utkanos

+1

它不會發送404頭,除非你指定它。作爲@CodeGodie指出, – CodeGodie

+0

,這個解決方案將工作 – manniL