Обмен данными с использованием Laravel View Composers с разбивкой на страницы не работает - PullRequest
0 голосов
/ 01 марта 2020

Я хочу поделиться некоторыми данными с несколькими представлениями, в которых я использую концепцию View Composers Laravel следующим образом: в AppServiceProvider. php

view()->composer('*', function ($view)
    {
        /* SHARED DATA */
        $socialLinks = $settings = $categories =  array();

        if(Schema::hasTable('social_links')) {
            $socialLinksObj = new SocialLinkService();
            $socialLinks = $socialLinksObj->all();
        }

        if(Schema::hasTable('settings')) {
            $settingService = new SettingService();
            $settings = $settingService->list();
        }

        /* END SHARED DATA */
        $view->with([
            'socialLinks' => $socialLinks,
            'settings' => $settings,
        ]);
    });

Приведенный выше код работает нормально, так как разделяет данные для каждого представления, но у меня есть те же представления, которые имеют разбитые на страницы данные, подобные этому запросу:

Inventories::with($relations)->latest()->paginate($pagination)

на этой странице у меня есть данные, которыми я делюсь из представления composer, как вы можете видеть на скриншоте ниже

enter image description here

но при I go на следующую страницу общие данные недоступны.

ie

что я должен сделать, чтобы достичь своей цели?

1 Ответ

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

Итак, во-первых, это не очень хорошее использование представления composer. Код выполняется для каждого отдельного блэйда вида, который визуализируется и является крайне неэффективным.

Если вам нужно поделиться несколькими частями данных, я бы добавил этот код в ваш AppServiceProvider::boot() метод:

        /* SHARED DATA */
        $socialLinks = $settings = $categories =  array();

        if(Schema::hasTable('social_links')) {
            $socialLinksObj = new SocialLinkService();
            $socialLinks = $socialLinksObj->all();
        }

        if(Schema::hasTable('settings')) {
            $settingService = new SettingService();
            $settings = $settingService->list();
        }

        /* END SHARED DATA */
        View::share('socialLinks', $socialLinks);
        View::share('settings', $settings);

И тогда ваши переменные будут доступны в каждом представлении как $socialLinks и $settings. Просто помните, что если в какой-то момент в вашем коде вы передадите другой socialLinks или settings в свой просмотр, он будет перезаписан последним набором.

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