Я собираюсь посчитать некоторые значения столбцов таблицы, используя следующую функцию контроллера,
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
в моем URL, как это
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)
как можно решить эту проблему?
ясно, что вы просто используете showcategoryname () метод в _includes.nav.usermenu
маршрут не на всех маршрутах, поэтому он не может распознать эту переменную, лучше использовать глобальную переменную на всех маршрутах
так в 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);
});
этот код выполняется перед любым кодом или контроллером! на самом деле это особенность функции загрузки!
Вы можете вставить этот код в boot
функция в App\Providers\AppServiceProvider
учебный класс
public function boot(){
$names = Vehicle::groupBy('categoryname')->select('id', 'categoryname', \DB::raw('COUNT(*) as cnt'))->get();
View::share('names', $names);
}