2017-04-27 21 views
1

我一直在閱讀文檔上下,現在仍然不知道我做錯了什麼。在我看來,初學者很難理解文檔。瞭解外牆和服務提供商有一些困難

無論如何,我試圖做一些類似於Auth::user()方法,它返回關於登錄用戶的額外數據,我將需要這個應用程序。

我有這樣的輔助類在這裏:

namespace App\Helpers; 

use Auth; 
use Illuminate\Http\Request; 

use App\Models\Grouping\User; 
use App\Models\Grouping\Client; 
use App\Models\Grouping\Rank; 

class ClientUser { 
    public function __construct($request) { 
     $this->request = $request; 
    } 

    public function client() { 
     return Client::find($this->request->session()->get('client_id')); 
    } 

    public function auth() { 
     if (Auth::check()) { 
      // Get the client 
      $client = $this->client(); 

      // Get the client's user 
      $user = $client->users()->find(Auth::user()['id']); 

      // Get the rank of the logged in user 
      $rank = Rank::find($user->pivot->rank_id); 

      return [ 
       'user' => $user, 
       'rank' => $rank, 
       'client' => $client 
      ]; 
     } 

     return null; 
    } 
} 

這是負責做什麼,我描述的那樣,回到我無法通過Auth::user()獲得額外的數據。現在,我想在AuthServiceProvider

public function register() 
    { 
     // Register client auth 
     $request = $this->app->request; 

     $this->app->singleton(ClientUser::class, function ($app) { 
     return new ClientUser($request); 
     }); 
    } 

註冊該類現在我不明白的是,我應該如何使這個全球訪問整個我的應用程序一樣Auth::user()是。

只是做「導入」它的問題是,它需要請求對象,這就是爲什麼我通過服務容器傳遞它。

現在,這裏是我卡住的地方。我無法在控制器或任何位置訪問app,而且我無法定義Facade,因爲Facade希望您返回應該「別名」的綁定服務的字符串。

回答

1

改變你的服務提供商是這樣的:

$this->app->bind('client.user', function ($app) { 
     return new ClientUser($app->request); 
     }); 

再創建一個類從Illuminate\Support\Facades\Facade延長。

namespace App\Facades; 

use Illuminate\Support\Facades\Facade; 

class ClientUserFacade extends Facade { 
    public static function getFacadeAccessor(){ 
     return "client.user"; 
    } 
} 

添加'ClientUser => ClientUserFacade::classapp.php

+0

這仍然沒有解決我的困惑alias關鍵,如何使一個門面出這個,所以我可以做'ClientUser ::用戶()'? –