未定义变量:Laravel 5.6应用程序中的名称?

时间:2018-11-08 11:15:22

标签: php laravel-5

我将使用以下控制器功能来计算一些表列的值

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)

如何解决此问题?

2 个答案:

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