Неопределенная переменная: имена в приложении Laravel 5.6? - PullRequest
0 голосов
/ 08 ноября 2018

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

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)

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

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

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

public function boot(){
     $names = Vehicle::groupBy('categoryname')->select('id', 'categoryname', \DB::raw('COUNT(*) as cnt'))->get();         
     View::share('names', $names);
}
0 голосов
/ 08 ноября 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...