2017-12-07 13 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 }} 

폐쇄와 뷰 작곡가를 사용하고 이동하는 또 다른 방법 : 그것을 해결하는 방법은보기로 논리를 이동하는 것입니다

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

기본적으로 요청주기 초기에 세션에 대한 액세스 권한이 없습니다. web 미들웨어 그룹에는 실제로 세션을 시작하고로드하는 책임이있는 StartSession 미들웨어가 있습니다. Auth 시스템은 기본적으로 web 가드이며 세션을 사용하여 사용자를 저장합니다. 따라서 세션에 아직 액세스 할 수 없기 때문에 사용자는 null으로 반환됩니다. 요청은 아직 미들웨어 스택에 도달하지 못했습니다.

이렇게하려면 미들웨어를 추가 할 수 있습니다. web 스택 끝에 미들웨어를 추가하십시오. 이 미들웨어가 실행되면 스택의 이전 미들웨어가 이미 세션을로드하여 인증 된 사용자에게 액세스 할 수있게됩니다.

레이아웃과 비슷하다면이 변수가 필요한 대신 뷰 컴포저를 사용할 수 있습니다. 귀하의 필요에 따라 몇 가지 옵션이 있습니다.