这是我第一次寻求帮助。我不是开发人员或任何接近的人,我在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 }}
,并且我一直得到相同的未定义变量错误。
此时我相信解决方案可能很简单,其中一个会让我感到愚蠢,但我找不到解决方案。
任何帮助将不胜感激。
提前致谢。
答案 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] }}