Неопределенная переменная: имена в приложении Laravel 5.6?

Я собираюсь посчитать некоторые значения столбцов таблицы, используя следующую функцию контроллера,

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)

как можно решить эту проблему?

1

Решение

ясно, что вы просто используете 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);
});

этот код выполняется перед любым кодом или контроллером! на самом деле это особенность функции загрузки!

3

Другие решения

Вы можете вставить этот код в boot функция в App\Providers\AppServiceProvider учебный класс

public function boot(){
$names = Vehicle::groupBy('categoryname')->select('id', 'categoryname', \DB::raw('COUNT(*) as cnt'))->get();
View::share('names', $names);
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector