ファサードは、アプリケーションのサービス コンテナーのバインディング クラスに「静的」インターフェイスを提供します。 Laravel には、知らず知らずのうちに使用している可能性のある多くの組み込みファサードがあります。 Laravel のファサードは、サービス コンテナ内の基礎となるクラスの「静的プロキシ」として機能し、従来の静的メソッドと比較して、メンテナンス中にテストが容易で、より柔軟で簡潔で表現力豊かな構文を提供できます。
Laravel アプリケーションのコンテキストでは、ファサードはコンテナ内のオブジェクトへのアクセスを提供するクラスです。このメカニズムの原理は、Laravel 独自のファサードと作成されたカスタム ファサードによって実装され、IlluminateSupportFacadesFacade 基本クラスから継承されます。
ファサード クラスは 1 つのメソッド getFacadeAccessor を実装するだけで済みます。コンテナから何を解決するかを定義するのは getFacadeAccessor メソッドであり、その後、Facade 基本クラスがマジック メソッド __callStatic() を使用して、ファサードから解決されたオブジェクトを呼び出します。
次の例では、Laravel のキャッシュ システムを呼び出します。コードを参照すると、Cache の静的メソッド get を呼び出したと思われるかもしれません。
<?phpnamespace App\Http\Controllers;use Cache;use App\Http\Controllers\Controller;class UserController extends Controller{ /** * 为指定用户显示属性 * * @param int $id * @return Response */ public function showProfile($id) { $user = Cache::get('user:'.$id); return view('profile', ['user' => $user]); }}
注意してください。上部にはキャッシュ ファサードが紹介されています。このファサードは、基礎となる IlluminateContractsCacheFactory インターフェイスの実装にアクセスするためのプロキシとして機能します。ファサードに対して行うすべての呼び出しは、Laravel キャッシュ サービスの基礎となるインスタンスに渡されます。
IlluminateSupportFacadesCache クラスのソース コードを見ると、静的メソッド get がないことがわかります。
class Cache extends Facade{ /** * 获取组件注册名称 * * @return string */ protected static function getFacadeAccessor() { return 'cache'; }}
キャッシュ ファサードは Facade 基本クラスを継承し、getFacadeAccessor を定義します。このメソッドの役割は、サービス コンテナ バインディング クラスのエイリアスを返すことです。ユーザーが Cache クラスの静的メソッドを参照すると、Laravel はサービス コンテナからキャッシュ バインディングを解決し、要求されたすべてのメソッド (この場合は get) を呼び出します。 ) 解決されたオブジェクトに対して。
以下に、各ファサードとそれに対応する基礎となるクラスをリストします。これは、特定のルートの API ドキュメントを詳しく調べるのに適した方法です。ファサード。非常に便利なツール。サービス コンテナーのバインディング キーも含まれます:
门面 | 类 | 服务容器绑定别名 |
---|---|---|
App | IlluminateFoundationApplication | app |
Artisan | IlluminateConsoleApplication | artisan |
Auth | IlluminateAuthAuthManager | auth |
Auth (Instance) | IlluminateAuthGuard | |
Blade | IlluminateViewCompilersBladeCompiler | blade.compiler |
Bus | IlluminateContractsBusDispatcher | |
Cache | IlluminateCacheRepository | cache |
Config | IlluminateConfigRepository | config |
Cookie | IlluminateCookieCookieJar | cookie |
Crypt | IlluminateEncryptionEncrypter | encrypter |
DB | IlluminateDatabaseDatabaseManager | db |
DB (Instance) | IlluminateDatabaseConnection | |
Event | IlluminateEventsDispatcher | events |
File | IlluminateFilesystemFilesystem | files |
Hash | IlluminateContractsHashingHasher | hash |
Input | IlluminateHttpRequest | request |
Lang | IlluminateTranslationTranslator | translator |
Log | IlluminateLogWriter | log |
IlluminateMailMailer | mailer | |
Password | IlluminateAuthPasswordsPasswordBroker | auth.password |
Queue | IlluminateQueueQueueManager | queue |
Queue (Instance) | IlluminateQueueQueueInterface | |
Queue (Base Class) | IlluminateQueueQueue | |
Redirect | IlluminateRoutingRedirector | redirect |
Redis | IlluminateRedisDatabase | redis |
Request | IlluminateHttpRequest | request |
Response | IlluminateContractsRoutingResponseFactory | |
Route | IlluminateRoutingRouter | router |
Schema | IlluminateDatabaseSchemaBlueprint | |
Session | IlluminateSessionSessionManager | session |
Session (Instance) | IlluminateSessionStore | |
Storage | IlluminateContractsFilesystemFactory | filesystem |
URL | IlluminateRoutingUrlGenerator | url |
Validator | IlluminateValidationFactory | validator |
Validator (Instance) | IlluminateValidationValidator | |
View | IlluminateViewFactory | view |
View (Instance) | IlluminateViewView |