Как в Laravel 5.3 передать данные меню во все виды сразу?

Только приступил к изучению Laravel.
Хочу вывести меню на все страницы сайта. Создал промежуточный MainController который наследует Controller. От MainController наследуются все остальные контроллеры. Код MainController

class MainController extends Controller
{
    public $data = [];

    public function __construct()
    {
        $this->data['categories'] = DB::table('categories')->get();
        return $this->data;
    }
}


Теперь во всех остальных контроллерах в конструкторе наследую конструктор родителя, и передаю данные во вьюшку. Пример

class HomeController extends MainController
{
    public function __construct()
    {
        $this->middleware('auth');
        parent::__construct();
    }

    public function index()
    {
        return view('home', $this->data);
    }
}


Все ничего и хорошо работает, НО! Есть ряд вопросов:
  1. Как можно в MainController сразу в конструкторе передать данные во все вьюшки (return view('layouts.app', $this->data) - не работает)
  2. На данный момент меню отображается только для зарегистрированных пользователей. А если выйти то возникает ошибка "Undefined variable: categories (View: /var/www/html/lara2/resources/views/layouts/app.blade.php) (View: /var/www/html/lara2/resources/views/layouts/app.blade.php)"


Подскажите пожалуйста решение? Или я не в ту сторону иду.
  • Вопрос задан
  • 431 просмотр
Решения вопроса 1
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
https://laravel.com/docs/5.3/views#sharing-data-wi...

public function __construct()
    {
        $this->data['categories'] = DB::table('categories')->get();
        return $this->data;
    }

конструкторы не возвращают значений, что это вообще значит у вас.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы