2017-04-07 70 views
1

这是一个困扰我一段时间的问题。Laravel 5.4 - 数组返回NULL而不是数值

我有一个服务提供程序将数据传递到所有视图,每次侧边栏呈现。像这样:

`  
    public function boot() 
    { 

    $userrole = array (DB::table('users')->where('id','=', Auth::id())->value('role')); 
    $menucase1 = [3,4,9,10];   
    $menucase2 = [1,2,3,10]; 
    $menucase3 = [1,3,4,9,10]; 
    $menucase4 = [4,9]; 

    $commondata = compact('userrole','menucase1','menucase2','menucase3','menucase4'); 

    view()->share('commondata', $commondata); 
    View::composer('sidebar', function ($view) { 
     $userrole = array (DB::table('users')->where('id','=', Auth::id())->value('role')); 
     $menucase1 = [3,4,9,10]; 
     $menucase2 = [1,2,3,10]; 
     $menucase3 = [1,3,4,9,10]; 
     $menucase4 = [4,9]; 
     $commondata = compact('userrole','menucase1','menucase2','menucase3','menucase4'); 
    $view->with('commondata', $commondata); 
    }); 

}` 

做一个{{ dd($commondata) }}返回menucase阵列正确的值,但NULL$userrole

如果我在控制器声明相同$userrole变量并调用变量在视图中,所述收到的数据是正确的。

这是怎么发生的?

在此先感谢

+0

这是因为会话启动后控制器创建。 – KoIIIeY

+0

所以,只需检查Auth :: id - 它将为空。 – KoIIIeY

+0

谢谢,我刚刚打印了userid,就像这个'{{Auth :: id()}}'一样,它返回了一个值。 –

回答

0

不明白你究竟在做什么。

如果你想获得尽可能阵列用户角色,您可以使用pluck方法:

$userRole = User::where('id', Auth::id())->pluck('role')->toArray(); 

但对于当前用户你可以得到角色

$userRole = [Auth::user()->role]; 

UPD:你也可以做到这一点在视图中没有任何分享

{{ Auth::user()->role }} 
+0

感谢您的帮助。主要目标是根据用户的角色过滤侧边栏链接的内容。我知道有完整的软件包可以实现这一点,我尝试过,但我是一个新手,从来没有做任何其他解决方案的工作....所以我试图通过一组数据,我知道它将需要所有的页面,userrole和菜单条件(用ifs来测试)。我尝试了你的第一个解决方案'$ userRole = User :: where('id',Auth :: id()) - > pluck('role') - > toArray(); '它返回na空数组的userrole索引 –

+0

@MarcoAssunção这是一个伟大的角色/权限控制包。检查它,也许你会发现它很有用。 https://github.com/Zizaco/entrust – aleksejjj

+0

我已经测试过了,但我得到的想法是我需要在我的项目中改变很多东西。现在我只是想尝试一个更简单的解决方案。我是一个新手...小步骤:) –

0

如果您的用户有来自不同表格的许多角色,而您h大大定义的关系,你可以做

$userrole = Auth::user()->roles->pluck('name'); 

//will return all the roles names in an array 
//Replace name by the actual column you want from 'roles' table.