2013-12-17 48 views
-1

我試圖建立一個laravel 4上的路線系統,有像主要的url例子: http://laravel.dev/並且可以渲染這條路線上的2個不同的控制器中的一個。與2個不同的控制器laravel的主要網址4

例如:

如果用戶A登錄我會告訴這個網址的主頁 - >http://laravel.dev/

如果用戶A沒有登錄我將顯示在這個登錄頁面URL too - >http://laravel.dev/

我試圖設置我的路線,但它顯示了一個空白頁。我該如何解決?

Route::get('/', array('before' => 'detectLang',function(){ 
    if (Auth::guest()) { // check if user is logged 
     Route::get('/', '[email protected]'); // function that show the main page 
    } else { 
     Route::get('/','[email protected]'); // function that render the login page 
    } 
})); 

回答

1

我會建議從你的路由文件中刪除的邏輯,因爲它只是事情複雜化,而不是一羣路線,像這樣

Route::group(array('before' => 'detectLang'), function() { 

    Route::group(array('before' => 'guest'), function() { 
     Route::get('/', '[email protected]'); 
    }); 

    Route::group(array('before' => 'auth'), function() { 
     Route::get('/', '[email protected]'); 
    }); 

}); 

這允許你以一種很好的方式將所有內容分組,並保持邏輯分離,畢竟這是路由過濾器的目的。

3

這不是路線在Laravel中的工作方式。只有當你擊中該路線時纔會調用路線中的封閉物,因此在這種情況下,Laravel將無法創建這兩條路線並傾聽它們。

但是你可以用一組做你需要的東西:

Route::group(array('before' => 'detectLang'), function() 
{ 
    if (Auth::guest()) { // check if user is logged 
     Route::get('/', '[email protected]'); // function that show the main page 
    } else { 
     Route::get('/','[email protected]'); // function that render the login page 
    } 
}); 
+0

是的,它是正確的非常感謝你! – Fabrizio