2017-04-06 30 views
0

這是我第一次請求幫助。我不是一個開發人員或任何關係,我在PHP和Laravel方面的知識很薄弱。我正在創建一個Web應用程序,我需要從我創建的數組中獲取值,但在所有我嘗試過的情況下,我總是收到「未定義變量」的錯誤。Laravel 5.4將數組傳遞給所有視圖

我想過濾側欄中的項目。我使用角色作爲過濾器。 側邊欄是一個包含內容,即在default.blade.php之內調用,在該輪到時,視圖home.blade.php擴展了默認值。

如果我在我的HomeController中聲明$ usersrole,我可以看到側邊欄很好。但是,如果我點擊任何鏈接,我會得到錯誤「未定義的變量」。 HomeController的是這樣的:

... 
$userrole = 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]; 
return view('home', compact('tasks','user','tasktypes','userrole','menucase1','menucase2','menucase3','menucase4')); 

,所以我想,我會需要的所有頁面所有這些變量,我已經找到了解決辦法是建立在巫婆BaseController我聲明數組,這樣:

$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 = array_merge($userrole,$menucase1,$menucase2,$menucase3,$menucase4); 
View::share('commondata', $commondata); 

所有其他控制器將擴展BaseController。但我仍然得到相同的未定義變量錯誤。

所以我試了另一個解決方案,創建一個服務提供商,在config \ app.php中聲明服務。我已經在boot()函數中聲明過相同的數組。

在我的看法中,我試圖得到$userrole這樣的值,像這樣{{ $commondata->$userrole }},我一直得到相同的未定義變量錯誤。

在這個時候,我相信解決方案可能很容易,其中一個會讓我感到無聊,但我找不到解決方案。

任何幫助將不勝感激。

在此先感謝。

回答

0

您正在尋找View Composers。裏面您創建嘗試添加該代碼相關的服務提供商

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

現在,每當Laravel試圖呈現sidebar刀片它將使在視圖中可用的$commondata變量。在視圖中,您可以使用{{ $commondata[0] }}

+0

訪問該值感謝您的回答,但不幸的是我得到了同樣的錯誤。也許它是我在視圖中調用值的方式:{{$ commondata - > $ userrole}} –

+0

您是否只在側欄中使用'$ commondata'?如果不嘗試將'View :: composer('sidebar',function($ view){...})'改爲'View :: composer('default',function($ view){...})' – jfadich

+0

@MarcoAssunção還要注意''commondata'是一個數組,不是對象,所以你應該使用'{{$ commondata ['userrole']}}即使它是一個對象,你也不應該在$ userrole,像'{{$ commondata-> userrole}}' – jfadich