我最近开始使用Laravel 4进行开发,我对路线有疑问。
对于'/',我希望根据用户的身份验证状态设置两个不同的视图页面。
如果用户已登录并正在查看“/”,我想向他们展示一个带有管理控件的视图,当用户在没有登录的情况下以普通用户身份查看“/”时,我想提供一个一般信息视图。
为了做到这一点,我一直在玩过滤器'auth'和'guest',但我没有运气。 // app / routes.php
// route for logged in users
Route::get('/', array('before' => 'auth', function()
{
return 'logged in!';
}));
// for normal users without auth
Route::get('/', function()
{
return 'not logged in!';
}));
以上代码的工作原理是,作为登录用户,我能够显示正确的响应,但在注销后,我无法看到正常用户的正确响应。
也许这应该在控制器中处理?如果有人能指出我正确的方向,那将非常有帮助。
答案 0 :(得分:14)
一个(简单)选项是使用Auth::check()
函数查看他们是否已登录:
Route::get('/', function()
{
if (Auth::check())
{
return 'logged in!';
}
else
{
return 'not logged in!';
}
});
如果您愿意,您可以在控制器中使用相同的逻辑。
编辑 - 使用过滤器
如果您想在过滤器中执行此操作,可以使用以下内容:
Route::filter('auth', function()
{
if (Auth::guest())
{
return Redirect::to('non-admin-home');
}
});
然后定义第二个路由(或控制器中的操作)来处理普通用户。虽然这对网页来说意味着不同的网址,但我认为这不是你想要的......
完全基于控制器的路由流程(保持routes.php
清洁)
routes.php文件
Route::controller('/', 'IndexController');
IndexController.php
class IndexController extends BaseController
{
// HOME PAGE
public function getIndex()
{
if (Auth::check())
{
return View::make('admin.home');
}
else
{
return View::make('user.home');
}
}
}