2017-06-14 73 views
2

我想在我的網站的頭部和其他一些視圖中顯示未讀消息的數量。爲此我編寫了一個全球中間件,但是這個中間件無法訪問註冊用戶的身份驗證信息。Laravel 5.3:如何在全球中間件中使用檢查身份驗證?

<?php 

namespace PTA_OIMS\Http\Middleware; 

use Illuminate\View\Factory; 
use Closure; 
use Illuminate\Contracts\Auth\Guard; 
use PTA_OIMS\Kartable; 
use Session; 

class UnreadMessage 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 

    protected $auth; 
    protected $view; 

    public function __construct(Guard $auth, Factory $view) 
    { 
     $this->auth = $auth; 
     $this->view = $view; 
    } 

    public function handle($request, Closure $next) 
    { 
     $unreadMessage = NULL; 
     $user = $this->auth->check(); 
     if (!empty($user)) { 
      $unreadMessage = Kartable:: 
      where('id_reciver', '=', 
       Session::get('personnel_info.0')->box_id) 
       ->whereBetween('status', [1, 2]) 
       ->where('view_date', '=', Null) 
       ->count(); 
     } 
     $this->view->share('unreadMessage', $unreadMessage); 
     return $next($request); 
    } 
} 

UPDATE:

<?php 

namespace PTA_OIMS\Http; 

use Illuminate\Foundation\Http\Kernel as HttpKernel; 

class Kernel extends HttpKernel 
{ 
    /** 
    * The application's global HTTP middleware stack. 
    * 
    * These middleware are run during every request to your application. 
    * 
    * @var array 
    */ 
    protected $middleware = [ 
     \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
     \PTA_OIMS\Http\Middleware\UnreadMessage::class, 

    ]; 

    /** 
    * The application's route middleware groups. 
    * 
    * @var array 
    */ 
    protected $middlewareGroups = [ 
     'web' => [ 
      \PTA_OIMS\Http\Middleware\EncryptCookies::class, 
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
      \Illuminate\Session\Middleware\StartSession::class, 
      \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
      \PTA_OIMS\Http\Middleware\VerifyCsrfToken::class, 
      \Illuminate\Routing\Middleware\SubstituteBindings::class, 
     ], 

     'api' => [ 
      'throttle:60,1', 
      'bindings', 
     ], 
    ]; 

    /** 
    * The application's route middleware. 
    * 
    * These middleware may be assigned to groups or used individually. 
    * 
    * @var array 
    */ 
    protected $routeMiddleware = [ 
     'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 
     'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
     'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 
     'can' => \Illuminate\Auth\Middleware\Authorize::class, 
     'guest' => \PTA_OIMS\Http\Middleware\RedirectIfAuthenticated::class, 
     'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 

    ]; 
} 
+0

使用'\ Auth'從門面 – xmhafiz

+0

驗證::檢查()返回一個布爾,而不是用戶實例,你想在檢查之後使用Auth :: user()來獲取用戶。 – btl

+1

這不屬於中間件。中間件用於處理HTTP請求和響應。它更適合放在_view composer_中:https://laravel.com/docs/master/views#view-composers –

回答

0

嘗試使用全球auth()幫手:

$user = auth()->check(); 
+0

這不行:(( –

+0

@RohullahRajaeeRad請顯示'app \ Http \ Kernel.php'你使用。 –

相關問題