Как предотвратить циклы в глобальной переменной laravel - PullRequest
0 голосов
/ 17 марта 2020

Я создал файл GlobalVariable.php внутри app\Composers

public function compose($view)
{
    $categories = \App\Models\Category::all();
    $view->with('globCategory', $categories);
}

, затем зарегистрируйтесь на AppServiceProvider код view()->composer('*', GlobalVariable::class);

Я использую глобальный $globCategory для создания динами c navbar

<ul class="nav nav-tabs border-0 flex-column flex-lg-row">
    @foreach ($globCategory as $item)
        <li class="nav-item">
            <a href="{{ route('deal.category', ['category' => $item->slug]) }}" class="nav-link">{{$item->name}}</a>
        </li>
    @endforeach
</ul>

единственная проблема здесь, когда я вижу laravel debuggar, он показывает повторение запроса категорий.

вот результат

enter image description here

Как избежать этого зацикленного запроса? есть ли правильный путь?

Ответы [ 2 ]

1 голос
/ 17 марта 2020

То, как вы регистрируете ваше представление composer (используя '*' вместо определенного имени представления), будет вызываться метод compose для каждого отдельного визуализированного представления + подпредставления.

Вместо этого вы можете сделать следующее:

view()->composer('*', GlobalVariable::class);

Иметь это:

\View::share('globCategory', \App\Models\Category::all());

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

0 голосов
/ 17 марта 2020

Представления композиторов, как описано в документации laravel, привязывают данные к представлению при каждом его отображении. Они очищают наш код, получая данные один раз и передавая их в представление.

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

Заменить view name на asterisk wildcard.

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