Laravel控制器功能全局应用

时间:2016-09-19 03:24:10

标签: php 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,
            ]);
        };  
    }   

我想知道的是,如何让所有经过身份验证的用户全局触发此功能,以便我可以在每个页面上显示未读消息的数量?

2 个答案:

答案 0 :(得分:1)

使用View Composer

  

视图组合器是在呈现视图时调用的回调或类方法。

说明您的未读收件箱位于navbar.blade.php

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

答案 1 :(得分:1)

参考http://culttt.com/2014/02/10/using-view-composers-laravel-4/

View Composer实际上只是在请求View时执行并绑定到View的一段代码。

适用于多个页面 您还可以通过添加以逗号分隔列出的视图来在多个页面上提供此数据。

View::composer(array('profile','dashboard'), function($view)
{
  $view->with('count', Unread::updateUnreadCount());
});