Laravel 5.8 добавить данные в переменную макета через конструктор контроллера - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь добавить данные в переменную макета через конструктор контроллера. Причина, по которой я хочу это сделать, заключается в том, что мне всегда нужно добавлять категории в главное меню при вызове этого контроллера.

Пока безуспешно. Я добавляю данные в макет через представление composer, как это.

namespace App\Http\ViewComposers;

use Illuminate\View\View;
use App\Menu;

class MenuComposer
{
    public function compose(View $view)
    {
        if (in_array($view->getName(), ['layouts.master', 'layouts.master-post', 'layouts.error']))
        {
            $menu = Menu::menu('topmenu');

            view()->with('topmenu',  $menu);
            // view()->share('topmenu',  $menu); not working either
        }
    }
}

Я хочу расширить данные в конструкторе контроллера.

namespace App\Http\Controllers\Post;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\View\View;

class PostController extends Controller {
    public function __construct(View $view)
    {
        $view->offsetGet('topmenu');
        // $view->gatherData() not working either
    }

Что бы я ни пробовал, Laravel выдает исключение:

Target [Illuminate \ Contracts \ View \ Engine] не может быть создан при создании [App \ Http \ Controllers \ Post \ PostController, Illuminate \ View \ View].

1 Ответ

0 голосов
/ 10 июля 2020

Что я сделал в функции загрузки сервис-провайдера:

view()->share('topmenu', [
    'items' => $newItemsToAdd
]);

В виде Composer Я сделал:

$extraItems = view()->shared('topmenu');

if (!empty($extraItems)) {
    $items = aray_merge($items, $extraItems);
}

}

...