2017-04-07 87 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.