2016-09-19 3 views
2

У меня есть контроллер для страницы входящих сообщений на моем веб-сайте, и в этом контроллере есть функция, которая подсчитывает количество непрочитанных сообщений, которые пользователь имеет.Функция контроллера Laravel применяется глобально

public function updateUnreadCount() { 
     if (Auth::check()) { 
      $value = 0; 
      $messages = Message::where(function($query) { 
       return $query->where('recipient_id', Auth::user()->id)->where('reci_read', 0) 
       ->orWhere('user_id', Auth::user()->id)->where('sender_read', 0); 
      }); 

      foreach ($messages as &$value) { 
        ++$value; 
      }; 

      Auth::user()->update([ 
       'unread_msg' => $value, 
      ]); 
     }; 
    } 

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

ответ

1

Использование View Composer

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

Скажите, что ваш непрочитанный почтовый ящик находится в navbar.blade.php.

 // From the documentation, using Closure based composers... 
     View::composer('navbar', function ($view) { 
      if(Auth::user()) { 
       //logic here 
      } 
     }); 
1

см http://culttt.com/2014/02/10/using-view-composers-laravel-4/

взгляд композитора, по существу, просто кусок кода, который выполняется и связан с видом всякий раз, когда View запрашивается.

Для нескольких страниц Вы также можете сделать эти данные доступными на нескольких страницах путем добавления разделенных запятыми в списке Views.

View::composer(array('profile','dashboard'), function($view) 
{ 
    $view->with('count', Unread::updateUnreadCount()); 
}); 
Смежные вопросы