Laravel 5.4将数组传递给所有视图

时间:2017-04-06 22:07:06

标签: arrays laravel-5.4

这是我第一次寻求帮助。我不是开发人员或任何接近的人,我在PHP和Laravel方面的知识很弱。我正在创建一个Web应用程序,我需要从我创建的数组中获取值,但在我尝试的所有情况下,我一直收到“未定义变量”的错误。

我想过滤侧边栏中的项目。我正在使用角色作为过滤器。 侧边栏是一个包含,在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 }},并且我一直得到相同的未定义变量错误。

此时我相信解决方案可能很简单,其中一个会让我感到愚蠢,但我找不到解决方案。

任何帮助将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分: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] }}

访问该值