Laravel 4: Two different view pages for a single URI based on auth status

自古美人都是妖i 提交于 2019-12-07 08:21:47

问题


I have recently got into developing with Laravel 4 and I had a question about routes.

For '/', I would like to have two different view pages based on the user's auth status.

If a user is logged in and is viewing '/', I would like to show them a view with admin controls and when a user is viewing '/' as a regular user without logging in, I would like to offer a general information view.

To accomplish this, I've been playing around with filter 'auth' and 'guest' but am having no luck. // 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!'; 
}));

The above code works to a point where the as a logged in user, I am able to display the proper response but after logging out, I cannot see the proper response as a regular user.

Perhaps this is something that should be handled in the controller? If someone could point me in the right direction, it would be really helpful.


回答1:


One (simple) option would be to use the Auth::check() function to see if they are logged in:

Route::get('/', function() 
{
    if (Auth::check())
    {
        return 'logged in!';
    }
    else
    {
        return 'not logged in!'; 
    }  
});

You would be able to use the same logic in the controller if you so wish.

EDIT - using filters

If you wanted to do this in the filter, you could use something like this:

Route::filter('auth', function()
{
    if (Auth::guest()) 
    {
        return Redirect::to('non-admin-home');
    }
});

and then defining a second route (or action in your controller) to handle the normal users. Though this would mean a different url for the page, which I don't think is what you want..

COMPLETE CONTROLLER-BASED ROUTING FLOW: (keeping routes.php clean)

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');
        }
    }
}


来源:https://stackoverflow.com/questions/18048105/laravel-4-two-different-view-pages-for-a-single-uri-based-on-auth-status

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!