Laravel - Контроллер - Динамическое меню - Все страницы - PullRequest
0 голосов
/ 10 марта 2019

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

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

Мой контроллер.

<?php

namespace App\Http\Controllers;

use App\Categorias;

use Illuminate\Http\Request;

class FrontendController extends Controller {

    public $template = 'default';

    // Retorna Navegação
    public function retornaNavegacao(){

        $sql = Categorias::where([
                ['exibir', '=', 1], ['publicado', '=', 1]
            ])
            ->get();

        return $sql;
    }

    // Página 'Categorias'
    public function categoria(){

        return view('frontend.'.$this->template.'.categorias.index', 
            array(
                'mainMenu' => $this->retornaNavegacao(),
            )
        );

    }

    // Página 'Produtos'
    public function produto(){

        return view('frontend.'.$this->template.'.produtos.index', 
            array(
                'mainMenu' => $this->retornaNavegacao(),
            )
        );

    }

    // Página 'Contato'
    public function contato(){

        return view('frontend.'.$this->template.'.contato.index', 
            array(
                'mainMenu' => $this->retornaNavegacao(),
            )
        );

    }

}

Функция retornaNavegacao () запрашивает только базу данных и возвращает все зарегистрированные меню (существует связь для поиска всех подкатегорий).

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

Ответы [ 2 ]

1 голос
/ 10 марта 2019

В AppServiceProvider редактирование класса boot метод

public function boot()
{
    $categories = Categorias::where([
            ['exibir', '=', 1],
            ['publicado', '=', 1]
        ])
        ->get();

    View::composer('*', function ($view) {
        $view->with(['mainMenu' => 'categories']);
    });
}

Также вы можете использовать всю силу laravel

public function boot()
{
    $mainMenu = Categorias::whereWxibir(1)
        ->wherePublicado(1)
        ->get();

    View::composer('*', function ($view) {
        $view->with(compact('mainMenu'));
    });
}
0 голосов
/ 10 марта 2019

Вы можете поделиться переменной во всех ваших представлениях из метода загрузки поставщика услуг приложения.

public function boot()
{

    $mainMenu = $this->retornaNavegacao(),

     view()->share(compact('mainMenu'));
}

Если вы хотите использовать переменную только в некоторых конкретных представлениях, вы можете создать собственный view composer .

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