2017-12-07 15 views
1

サービスプロバイダのログインユーザーに関する情報を取得するにはどうすればよいですか?テンプレート{{$ test}}でこれを使用すると常に0が返ってきますが、私は100%ログインしていることを確認しています。Laravel 5.5サービスプロバイダのテンプレート内のグローバル変数

use Illuminate\Support\ServiceProvider; 
use Auth; 
use View; 

class AppServiceProvider extends ServiceProvider 
{ 
    public function boot() 
    { 
     $user = Auth::user(); 
     if ($user !== null) { 
      $walletsCount = $user->wallets()->count(); 
     } else { 
      $walletsCount = 0; 
     } 
     View::share('test', $walletsCount); 
    } 
} 
+1

をしかし、あなたが認証を行うときには、すでにユーザーを持っています:: user() – MosCH

+0

'Auth :: user()'は既にグローバルなので、私はあなたの意図をよく理解していません... – Option

+0

私はコントローラでこれを使っていますが、何の問題もありません。私はテンプレートで財布を持っていたい。 –

答えて

1

Laravelは、サービス・プロバイダーをロードされたときに認証機能はまだ初期化されていないので、それは起こっています。

{{ auth()->check() ? auth()->user()->wallets()->count() : 0 }} 

閉鎖でのView Composerを使用している行くための別の方法:それに対処する一つの方法は、ビューにロジックを移動することです

public function boot() 
{ 
    view()->composer('*', function($view) { 
     $view->with('walletsCount', auth()->check() ? auth()->user()->wallets()->count() : 0); 
    }); 
} 
1

デフォルトでは、リクエストライフサイクルの早い段階でセッションにアクセスすることはできません。 webミドルウェアグループには、実際にセッションを開始してロードする責任を担うミドルウェアStartSessionがあります。 Authシステムのデフォルトでは、webガードは、セッションを使用してユーザーを格納します。セッションにまだアクセスしていないので、ユーザーはnullと返します。要求はまだミドルウェアのスタックにそれを作っていない。

これを行うためにミドルウェアを追加することができます。ミドルウェアをwebスタックの最後に追加します。このミドルウェアが実行されると、スタック内の以前のミドルウェアはすでにセッションをロードしているため、そこで認証されたユーザーにアクセスできます。

これはあなたがあなたの代わりにView Composerを使用することができため、この変数が必要なレイアウトのようなものである場合。必要に応じていくつかのオプションがあります。

関連する問題