2017-09-12 21 views
1

ファサードを理解するのが少し難しいと思っています。特に、ファサード名から基になるクラス名/場所を見つける方法。私はドキュメントを通過したが、まだ明確ではない。たとえば、Auth::login() を使用した場合、私はlogin()メソッドがありませんでした。Authファサードに見つかりました。Laravelのファサード名から基本クラス名を取得する方法

class Auth extends Facade 
{ 
/** 
* Get the registered name of the component. 
* 
* @return string 
*/ 
protected static function getFacadeAccessor() 
{ 
    return 'auth'; 
} 

/** 
* Register the typical authentication routes for an application. 
* 
* @return void 
*/ 
public static function routes() 
{ 
    static::$app->make('router')->auth(); 
} 
} 

認証ファサードgetFacadeAccessor()方法は、文字列AUTHを返します。しかし、どちらがauthクラスで見ているのですか?実際のクラスを解決するには?

おかげで、サービス・プロバイダで

+1

これは役に立つかもしれませんhttps://laravel.com/docs/5.5/facades#how-facades-work少し下をスクロールすると、どんなファサードがどのクラスに対応しているかがわかります – Christophvh

答えて

1

どこかauthキーが何かに登録されています。 authのキーはvendor/laravel/frameworksrc/Illuminate/Auth/AuthServiceProvider.phpです。 registerAuthenticator()メソッドでは、authキーがシングルトンパターンのIlluminate\Auth\AuthManagerに登録されていることがわかります。

コンテナには、キーを特定のクラスにバインドするいくつかの方法があります。例えば、bindおよびsingletonのような方法。ファサードは、ルートクラスの名前空間からメインクラスを静的に呼び出す余分なクラスです。

どのクラスが使用されているかチェックする場合は、次のコードを使用できます。get_class(resolve('auth'))。もちろん、authを確認したい文字列に置き換えることもできます。

ボーナス:自分のマネージャを何らかの方法で登録することで、この動作を無効にすることができます。通常のAuthManagerを拡張し、変更したいメソッドを上書きすることをお勧めします。

+0

ハイマーク。アプリケーションは 'app 'を解決するために、' Illuminate/Auth/AuthServiceProvider.php'クラスに行く必要があることをどのように知っていますか? –

+0

AuthServiceProviderを 'config/app.php'ファイルに登録します。そこに登録すると、起動時に 'boot'と' register'メソッドが実行されます。 –

1

また、あなたはそれのアクセサでクラスを解決するための容器を使用することができます例

$object = Auth::getFacadeRoot() // Illuminate\Auth\AuthManager instance 

または

$class = get_class(Auth::getFacadeRoot()) // 'Illuminate\Auth\AuthManager' 

完全修飾クラス名を取得するためにgetFacadeRoot()

を使用することができます。これは、Facadeを解決するときにLaravelがフードの下で行うことです。

$object = resolve('auth'); // Illuminate\Auth\AuthManager instance 
1

1つのオプションは、Auth::check()\Illuminate\Contracts\Auth\Guard::check()に存在し、通常の方法は、これらのクラス/インタフェースたとえば

に存在しなければならないファサード

/** 
* @see \Illuminate\Auth\AuthManager 
* @see \Illuminate\Contracts\Auth\Factory 
* @see \Illuminate\Contracts\Auth\Guard 
* @see \Illuminate\Contracts\Auth\StatefulGuard 
*/ 
class Auth extends Facade 

@see注釈を利用することです。

これらの定義に従うことを可能にするエディタを使用すると、トラバースが少し楽になります。通常は@see注釈が1つしかないので、クラスを見つけるのはかなり簡単です。

+0

こんにちは。はい、崇高なテキストがこの機能を持っています。しかし、私はこれを私自身で解決する方法を学びたがっていました。しかし、ありがとう。 –

関連する問題