我试图在 Laravel 4 上设置一个路由系统,具有类似的主 url 示例:http://laravel.dev/并可以在此路由上呈现 2 个不同控制器中的 1 个。
例:
如果用户 A 被记录,我将显示带有此 URL 的主页 --> http://laravel.dev/
如果用户 A 未记录,我也会在此 URL 中显示登录页面 --> http://laravel.dev/
我试图这样设置我的路线,但它向我显示了一个空白页。我该如何解决?
Route::get('/', array('before' => 'detectLang',function(){
if (Auth::guest()) { // check if user is logged
Route::get('/', 'MainController@getView'); // function that show the main page
} else {
Route::get('/','UserController@getLogin'); // function that render the login page
}
}));
这不是 Laravel 中路由的工作方式。仅当您命中该路由时,才会调用路由中的闭包,因此在这种情况下,Laravel将无法创建这两个路由并侦听它们。
但是,您可以使用组来执行所需的操作:
Route::group(array('before' => 'detectLang'), function()
{
if (Auth::guest()) { // check if user is logged
Route::get('/', 'MainController@getView'); // function that show the main page
} else {
Route::get('/','UserController@getLogin'); // function that render the login page
}
});
我建议从路由文件中删除逻辑,因为它只会使事情复杂化,而是像这样对路由进行分组
Route::group(array('before' => 'detectLang'), function() {
Route::group(array('before' => 'guest'), function() {
Route::get('/', 'MainController@getView');
});
Route::group(array('before' => 'auth'), function() {
Route::get('/', 'UserController@getLogin');
});
});
这使您可以以一种良好的方式对所有内容进行分组,并保持逻辑分离,毕竟这是路由过滤器的目的。