Laravel - количество непрочитанных сообщений от контроллера global

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

Это мой DashboardController:

class DashboardController extends Controller
{

public function index()
{
    $spentAmount = 0;
    $ordersPending = 0;
    $ordersCancelled = 0;
    $ordersCompleted = 0;
    $ordersPartial = 0;
    $ordersInProgress = 0;
    $orders = Auth::user()->orders;
    $ticketIds = Ticket::where(['user_id' => Auth::user()->id])->get()->pluck('id')->toArray();
    $unreadMessages = TicketMessage::where(['is_read' => 0])->whereIn('ticket_id', $ticketIds)->whereNotIn('user_id', [Auth::user()->id])->count();
    $supportTicketOpen = Ticket::where(['status' => 'OPEN', 'user_id' => Auth::user()->id])->count();

    foreach ($orders as $order) {
        if (strtolower($order->status) == 'pending') {
            $spentAmount += $order->price;
            $ordersPending++;
        } elseif (strtolower($order->status) == 'cancelled') {
            $ordersCancelled++;
        } elseif (strtolower($order->status) == 'completed') {
            $spentAmount += $order->price;
            $ordersCompleted++;
        } elseif (strtolower($order->status) == 'partial') {
            $spentAmount += $order->price;
            $ordersCompleted++;
        } elseif (strtolower($order->status) == 'inprogress') {
            $ordersInProgress++;
        }
    }
    return view('dashboard', compact(
        'spentAmount',
        'ordersPending',
        'ordersCancelled',
        'ordersCompleted',
        'unreadMessages',
        'ordersPartial',
        'supportTicketOpen',
        'ordersInProgress'
    ));


}

}

Вам нужно посмотреть на композиторов - laravel.com/docs/5.6/views#sharing-data-with-all-views.

Adam 07.09.2018 15:03

Я думаю, что проще всего было бы Middleware или композитор представлений, как предложено выше.

Loek 07.09.2018 15:03

Можно ли добавить к провайдеру классы приложений? используйте приложение \ билет; используйте App \ TicketMessage;

Freddie 07.09.2018 15:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
1 625
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть три разных способа решить вашу задачу

* Промежуточное ПО
* BaseClass
* JavaScript

промежуточное ПО и базовый контроллер аналогичны


Промежуточное ПО

public function handle($request, Closure $next)
{
    $notificationCount = 1;// query the database here and get notification for your

    // add $notificationCount to your request instance
    $request->request->add(['notificationCount' => $notificationCount]);

    // call the middleware next method and you are done.
    return $next($request);
}

и теперь вы можете прикрепить это промежуточное ПО к своим маршрутам или группе маршрутов


BaseController

class MyController extends Controller
{
    function __construct()
    {
        $this->middleware(function ($request, $next) {

            $notificationCount = 1;// query the database here and get notification for your

            // add $notificationCount to your request instance
            $request->request->add(['notificationCount' => $notificationCount]);

            // call the middleware next method and you are done.
            return $next($request);
        });
    }
}

и теперь вы можете расширить свой контроллер с помощью MyController вместо Controller, и затем вы можете использовать что-то вроде этого

{{ request('notificationCount') }}

Javascript

Создайте функцию / контроллер и верните количество уведомлений как return

class NotificationCounterController extends Controller
{
    function getNotificatioCount()
    {
        $notificationCount = 1;
        return ['count' => $notificationCount];
    }
}

и не вы можете сделать вызов ajax в событии загрузки документа.

this is good if want to update notification in every few time. like you can make ajax call in every 5 second.

Другие вопросы по теме