我将使用以下控制器功能来计算一些表列的值
public function showcategoryname()
{
$names = Vehicle::groupBy('categoryname')->select('id', 'categoryname', \DB::raw('COUNT(*) as cnt'))->get();
return view('_includes.nav.usermenu')->withNames($names);
}
那我的路线是
Route::get('_includes.nav.usermenu', [
'uses' => 'VehicleController@showcategoryname',
'as' => '_includes.nav.usermenu',
]);
我的usermenu刀片文件包含在其他刀片文件中,例如
div class="col-md-3 ">
@include('_includes.nav.usermenu')
</div>
和用户菜单刀片视图是
@foreach($names as $name)
{{ $name->categoryname }} ({{ $name->cnt }})
@endforeach
在我的网址中这样
http://localhost:8000/_includes.nav.usermenu
这很好。但是当我访问其他包含usermenu刀片的页面时,它是由于错误而生成的,
Undefined variable: names (View: C:\Users\banda\Desktop\dddd\resources\views\_includes\nav\usermenu.blade.php) (View: C:\Users\banda\Desktop\dddd\resources\views\_includes\nav\usermenu.blade.php)
如何解决此问题?
答案 0 :(得分:3)
很明显,您并不是在_includes.nav.usermenu
路由中只使用 showcategoryname()方法,因此并不是在每条路由中都使用它,因此它无法识别该变量,因此最好在所有路由中使用全局变量路线
因此在启动功能的app\Providers\AppServiceProviders.php
中,请使用以下代码在所有路由中使用该变量:
view()->composer('*', function ($view) {
$names = Vehicle::groupBy('categoryname')->select('id', 'categoryname', \DB::raw('COUNT(*) as cnt'))->get();
$view->with('names', $names);
});
此代码在任何代码或控制器之前运行!实际上是启动功能的功能!
答案 1 :(得分:1)
您可以将此代码插入boot
类的App\Providers\AppServiceProvider
函数中
public function boot(){
$names = Vehicle::groupBy('categoryname')->select('id', 'categoryname', \DB::raw('COUNT(*) as cnt'))->get();
View::share('names', $names);
}