2013-03-20 107 views
3

我該如何定義一條路線來接收所有請求並將它們轉發給一個特定的控制器?我已經嘗試添加默認路由Kohana 3.3全接觸路線

Route::set('default', '(<controller>(/<action>(/<id>)))') 
    ->defaults(array(
     'directory' => 'site', 
     'controller' => 'foobar', 
     'action' => 'foobar', 
)); 

Route::set('default', '(.*)') 
    -> defaults(array(
     'directory' => 'site', 
     'controller' => 'foobar', 
     'action' => 'foobar', 
)); 

bootstrap.php中,但它不工作。鍵入本地主機/一後,我得到任何

Unable to find a route to match the URI: a 

The requested URL a was not found on this server. 

錯誤。我敢肯定控制器是有效的,因爲

Route::set('foobar', 'foo') 
    -> defaults(array(
     'directory' => 'site', 
     'controller' => 'foobar', 
     'action' => 'foobar', 
)); 

工作正常。

我正在使用Kohana 3.3。

+0

爲什麼要這麼做?這將擊敗kohana的MVC的目的 – ITroubs 2013-03-20 19:06:07

+0

我試圖創建一個網站建設服務,我想將所有非管理網站存儲在數據庫中,並在需要時加載它們。這些網站將被動態地添加(我不能硬編碼路由);我不希望它們僅通過localhost/index.php?id = 7可用,而是通過localhost/siteName。控制器基本上會爲每個站點執行相同的操作 - 加載標題,元標記,內容等。然而,管理站點通常是路由的,但我需要一些東西來訪問普通文檔。 – Mateusz 2013-03-20 19:22:23

+0

我希望我的回答有幫助 – ITroubs 2013-03-20 19:35:49

回答

6

這應該工作:

Route::set('foobar', '<catcher>',array('catcher'=>'.*')) 
    -> defaults(array(
     'directory' => 'site', 
     'controller' => 'foobar', 
     'action' => 'foobar', 
)); 

<catcher>是一個佔位符和array('catcher'=>'.*')定義捕手相匹配的正則表達式.*

+0

這正是我所尋找的,而非你的! – Mateusz 2013-03-20 19:38:56

+0

將第三個參數留爲NULL仍然會匹配所有內容並跳過一些正則表達式處理。要獲取被捕獲的路由,使用'Request :: current() - > param('catcher');' – 2014-06-03 21:27:25