路線

2015-03-31 45 views
0

在我的routes.php文件,我有以下組:路線

Route::group(array('before' => 'checkSomething', 'prefix' => '{lang}'), function() { 
echo "1"; 
    Route::get('/', array('as' => 'home', 'uses' => '[email protected]')); 
}); 

和過濾器連接到它:

Route::filter('checkSomething', function(){ 
echo "2"; 
    if(!somethingNotRight($something)){ 
     return Redirect::route('index', array())); 
    } 
}); 

我的問題是,爲什麼是路由在路由組裏首先被調用,然後過濾?如果我執行這個代碼,我得到以下結果:

但我想要的是:

+0

你試過'Controller :: beforeFilter()'方法嗎? – 2015-03-31 09:13:32

回答

0

很簡單是吧?您aplying過濾器,然後將應用匹配的路由的控制,如果要應用過濾器後,只是改變:

Route::group(array('after' => 'checkSomething', 'prefix' => '{lang}')

0

Route::group瓶蓋內的代碼不是在叫路線執行的時刻。它很早就被稱爲的寄存器所有的路線。該過濾器工作正常,但要測試,你需要把回聲內部控制器

+0

但讓我們說我有一個路線 - > where()語句。那 - > where()依賴於在過濾器中設置的Session變量。所以在調用控制器方法之前,我需要過濾器中的東西。我會怎麼做? – 2015-03-31 09:20:09

+0

你不會。加載路由文件時,where語句需要「準備就緒」。 Laravel搜索匹配的路由(使用URI和條件),並且僅在該過濾器運行之後。 – lukasgeiter 2015-03-31 09:24:35

+0

那麼最好的解決方法是什麼? – 2015-03-31 09:34:27