【问题标题】:Laravel 5.4 - Array returning NULL instead of a numeric valueLaravel 5.4 - 返回 NULL 而不是数值的数组
【发布时间】:2017-09-03 00:56:00
【问题描述】:

这是一个困扰我一段时间的问题。

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

`      
   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 变量并在视图中调用该变量,则接收到的数据是正确的。

为什么会这样?

提前致谢

【问题讨论】:

  • 这是因为会话在控制器创建后开始。
  • 所以,只需检查 Auth::id - 它将为空。
  • 谢谢,我刚刚打印了用户ID,就像{{ Auth::id() }},它返回了一个值。
  • @KollleY - 我如何检查我的会话是否在控制器启动后开始......我是新手
  • dd(Auth::id());

标签: arrays laravel null


【解决方案1】:

不明白你到底想做什么。

如果你想获取用户角色作为数组,你可以使用pluck方法:

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

但对于当前用户,您可以获取角色

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

UPD:您也可以在视图中进行操作而无需任何共享

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

【讨论】:

  • 感谢您的帮助。主要目标是根据用户的角色过滤侧边栏链接的内容。我知道有完整的软件包可以实现这一点,我试过了,但我是一个新手,从来没有让任何其他解决方案工作......所以我试图传递一组数据,我知道所有页面、用户角色和菜单条件都需要它(用 ifs 进行测试)。我已经尝试了您的第一个解决方案$userRole = User::where('id', Auth::id())->pluck('role')->toArray(); ,它为用户角色索引返回了一个空数组
  • @MarcoAssunção 这是一个很好的角色/权限控制包。检查一下,也许你会发现它很有用。 github.com/Zizaco/entrust
  • 我已经对其进行了测试,但我得到的想法是我需要在我的项目中更改很多东西。现在我只是在尝试一个更简单的解决方案。我是新手......小步骤:)
  • 如果在我看来我这样做{{ Auth::user()->role }},它会显示用户角色。但是,如果我在服务提供商中将这个$userrole = array (DB::table('users')->where('id','=', Auth::id())->value('role')); 更改为这个{{ Auth::user()->role }},我会收到错误Trying to get property of non-object。所以正如有人之前所说,我可能会在会话开始之前启动控制器。我不知道下一步该做什么......
【解决方案2】:

如果您的用户有来自不同表的多个角色,并且您定义了关系,您可以这样做

$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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2021-07-31
    • 2013-11-17
    • 2019-05-14
    相关资源
    最近更新 更多