我应该将哪些数据存储在Laravel 5中的会话变量中

时间:2015-12-08 20:18:24

标签: php laravel session laravel-5

我是laravel的新手。我一直在使用不同类型用户的laravel 5应用程序。我需要有关我的视图的不同部分当前登录的用户类型的信息:

目前,我已经在各种控制器方法和用户对象上做了类似的事情,我可以确定在我的视图中它是哪种类型的用户:

在控制器中:

public function someMethod(){
    $user = Auth::user();
    return view('applications.show', compact('user'));
}

在视图中:

if($user->is_manager)
   // do this
else if($user->is_admin)
  // do that 

因为我在各种视图中需要有关用户类型的信息,所以我一直在几个地方调用Auth::user(),我开始认为这会在数据库上增加一些负载。是否最好将用户类型存储在会话变量中,以及我应该在会话中存储哪种数据?

2 个答案:

答案 0 :(得分:1)

将它存储在会话中不会是一个问题。

is_manager课程的User函数中,您可以执行以下操作...

public function is_manager()
{
    // Check if the session has been set first.
    if(\Session::has('is_manager')) {
        return \Session::get('is_manager');
    }

    // Do your necessary logic to determine if the user is a manager, ex...
    $is_manager = $this->roles()->where('name', '=', 'manager')->count() == 1;

    // Drop it in the session
    \Session::put('is_manager', $is_manager);

    return $is_manager;
}

请记住,如果您的会话驱动程序设置为数据库,那么这显然无济于事。

答案 1 :(得分:0)

我们按如下方式组织了常见的模型调用;

  • 获取这些模型的控制器,模型,库,作曲家,命令和作业的基类。所有相关的类都从这些基类扩展,因此拥有它们拥有的所有东西。
  • 主视图编辑器,用作所有视图的基础数据收集器。
  • 通过Redis查询缓存。以上所有类都使用户通过一个超时为一小时的缓存查询,因此每个用户每小时只执行一次查询。