2016-10-31 50 views
0

我有一個標題 - 用戶菜單記錄,每個用戶註冊有一個餘額導入,我想在我的標題部分顯示這個餘額用戶登錄,我tryng使用VIEW SHARE,像這樣,但它不能很好地工作:Laravel 5.2 - 共享所有視圖的數據

class AppServiceProvider extends ServiceProvider 
{ 

    public function boot() 
    { 
     //its just a dummy data object. 
     $balance = UserBalance::where('user_id', Auth::id())->first(); 

     // Sharing - the error interested this section: 
     view()->share('balance', $balance->balance); 
    } 

} 

我的錯誤

ErrorException在AppServiceProvider.php 23行:試圖讓非對象的 財產

line 23 : view()->share('balance', $balance->balance); 

菜單用戶部分(我的佈局,爲所有視圖內):

@if (Auth::guest()) 
      <li><a href="{{ url('login')}}">Accedi</a></li> 
      <li class="item-custom"><a href="{{url('register')}}">Registrati</a></li> 
      @else 
      <li class="hello-user"> 
      Ciao {{Auth::user()->name}} 
      </li> 
      <li> Your Balance: {{$balance}}</li> 
@endif 

謝謝您的幫助!

+0

因爲AppServiceProvider引導方法首先工作,並且Auth :: id()) - > first()返回null,之後你試圖從null中獲得平衡。 –

回答

1

它可能不是最好答案,但你有沒有考慮過在會話中存儲結果?

該會話可以通過任何視圖進行檢查和讀取。

if ($request->session()->has('balance')) { 
    $request->session()->get('balance', 0); 
} 
1

檢查用戶是否登錄。如果用戶未驗證,則Auth::user()->id不能存在,您還需要檢查$balance。如果查詢返回null,則會顯示錯誤。

ErrorException在AppServiceProvider.php 23行:試圖讓非對象

的 財產試試這個:

class AppServiceProvider extends ServiceProvider 
{ 

    public function boot() 
    { 
     if(Auth::check()){ 
      //its just a dummy data object. 
      $balance = UserBalance::where('user_id', Auth::user()->id)->first(); 

      // Sharing - the error interested this section: 
      view()->share('balance', (count($balance) > 0) ? $balance->balance : 0); 
     } 
    } 

} 
+0

我記錄是的!但是dd(Auth :: user() - > id)返回「null」,我不知道爲什麼。 –

+0

檢查'dd(Auth :: user())' –

0

您的驗證:: ID()返回null或它不檢索會話ID。因爲Laravel會話使用會話中間件進行處理,所有中間件都在AppserviceProvider之前執行。因此它不會檢索會話ID。您可以使用此代碼。因爲view() - > composer clouser將在視圖組合時執行。然後你可以使用會話ID

 public function boot() 
     { 
      $this->getBalance(); 
     } 

     public function getBalance() 
     { 
      view()->composer('*', function ($view) { 
        $balance = UserBalance::where('user_id', Auth::id())->first(); 
        View()->share('balance', $balance->balance); 
      }); 

     }