Laravel | Выполнение запроса для нескольких представлений без дублирования кода - PullRequest
1 голос
/ 24 апреля 2019

Я создаю приложение, которое запрашивает один и тот же набор команд для базы данных почти для каждого представления. Например, notifications; Мне нужно запросить, чтобы получить все уведомления для пользователя для каждого представления, где пользователь вошел в систему. В контроллерах я делаю это:

public function index() {
    $notifications = Notification::whereUserId(Auth::user()->id)->get();

    return view('home', compact('notifications'));
}

Это хорошо для 1 просмотра, но я получаю это при каждом вызове функции индекса, для каждого просмотра. Есть ли лучший способ сделать это без дублирования кода?

Как получение уведомлений только в 1 файле.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 апреля 2019

В методе boot() для App\Providers\AppServiceProvider добавьте следующую строку:

if(auth()->check()){
  View::share('notifications', Notification::whereUserId(auth()->id())->get());
}

Таким образом, переменная notifications будет использоваться во всех ваших представлениях (файлы .blade).

Вместо этого, если вы хотите просто обмениваться данными в некоторых конкретных представлениях, вы можете использовать View Composer. Проверьте документацию здесь: https://laravel.com/docs/5.8/views#view-composers

0 голосов
/ 24 апреля 2019

Почему ты делаешь это спереди?.... У меня похожая ситуация, у меня есть простое приложение, реализующее традиционное постраничное поведение, я делаю это:

  • Моя страница загружает только необходимые данные, включая данные представления
  • После загрузки с помощью Jquery (в моем случае) я получаю последние уведомления в простом компоненте через ajax, поэтому, если пользователь хочет видеть больше уведомлений, он может сделать это двумя способами, во-первых, нажавкнопку «Загрузить еще», или, нажав «Просмотреть все уведомления», я отправляю его в один просмотр со всеми пользователями уведомлений.

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

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