架構(gòu) ―― 門面

2018-02-24 15:38 更新

架構(gòu) —— 門面(Facades)

1、簡介

門面為應(yīng)用的服務(wù)容器中的有效類提供了一個(gè)“靜態(tài)”接口。Laravel附帶了很多門面,你可能在不知道的情況下正在使用它們。Laravel的門面作為服務(wù)容器中的底層類的“靜態(tài)代理”,相比于傳統(tǒng)靜態(tài)方法,在維護(hù)時(shí)能夠提供更加易于測(cè)試、更加靈活的、簡明且富有表現(xiàn)力的語法。

2、使用門面

在Laravel應(yīng)用的上下文中,門面就是一個(gè)提供訪問容器中對(duì)象的類。該機(jī)制原理由Facade類實(shí)現(xiàn),Laravel自帶的門面,以及創(chuàng)建的自定義門面,都會(huì)繼承自Illuminate\Support\Facades\Facade基類。

門面類只需要實(shí)現(xiàn)一個(gè)方法:getFacadeAccessor。正是getFacadeAccessor方法定義了從容器中解析什么,然后Facade基類使用魔術(shù)方法從你的門面中調(diào)用解析對(duì)象。

下面的例子中,我們將會(huì)調(diào)用Laravel的緩存系統(tǒng),瀏覽代碼后,也許你會(huì)覺得我們調(diào)用了Cache的靜態(tài)方法get

<?php

namespace 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]);
    }
}

注意我們?cè)陧敳课恢靡肓薈ache門面。該門面作為代理訪問底層Illuminate\Contracts\Cache\Factory接口的實(shí)現(xiàn)。我們對(duì)門面的所有調(diào)用都會(huì)被傳遞給Laravel緩存服務(wù)的底層實(shí)例。

如果我們查看Illuminate\Support\Facades\Cache類的源碼,將會(huì)發(fā)現(xiàn)其中并沒有靜態(tài)方法get

class Cache extends Facade{
    /**
     * 獲取組件注冊(cè)名稱
     *
     * @return string
     */
    protected static function getFacadeAccessor() { 
        return 'cache'; 
    }
}

Cache門面繼承Facade基類并定義了getFacadeAccessor方法,該方法的工作就是返回服務(wù)容器綁定類的別名,當(dāng)用戶引用Cache類的任何靜態(tài)方法時(shí),Laravel從服務(wù)容器中解析cache綁定,然后在解析出的對(duì)象上調(diào)用所有請(qǐng)求方法(本例中是get)。

擴(kuò)展閱讀:實(shí)例教程 —— 創(chuàng)建自定義Facades類

3、門面類列表

下面列出了每個(gè)門面及其對(duì)應(yīng)的底層類,這對(duì)深入給定根門面的API文檔而言是個(gè)很有用的工具。服務(wù)容器綁定鍵也被包含進(jìn)來:

門面 服務(wù)容器綁定別名
App Illuminate\Foundation\Application app
Artisan Illuminate\Console\Application artisan
Auth Illuminate\Auth\AuthManager auth
Auth (Instance) Illuminate\Auth\Guard
Blade Illuminate\View\Compilers\BladeCompiler blade.compiler
Bus Illuminate\Contracts\Bus\Dispatcher
Cache Illuminate\Cache\Repository cache
Config Illuminate\Config\Repository config
Cookie Illuminate\Cookie\CookieJar cookie
Crypt Illuminate\Encryption\Encrypter encrypter
DB Illuminate\Database\DatabaseManager db
DB (Instance) Illuminate\Database\Connection
Event Illuminate\Events\Dispatcher events
File Illuminate\Filesystem\Filesystem files
Hash Illuminate\Contracts\Hashing\Hasher hash
Input Illuminate\Http\Request request
Lang Illuminate\Translation\Translator translator
Log Illuminate\Log\Writer log
Mail Illuminate\Mail\Mailer mailer
Password Illuminate\Auth\Passwords\PasswordBroker auth.password
Queue Illuminate\Queue\QueueManager queue
Queue (Instance) Illuminate\Queue\QueueInterface
Queue (Base Class) Illuminate\Queue\Queue
Redirect Illuminate\Routing\Redirector redirect
Redis Illuminate\Redis\Database redis
Request Illuminate\Http\Request request
Response Illuminate\Contracts\Routing\ResponseFactory
Route Illuminate\Routing\Router router
Schema Illuminate\Database\Schema\Blueprint
Session Illuminate\Session\SessionManager session
Session (Instance) Illuminate\Session\Store
Storage Illuminate\Contracts\Filesystem\Factory filesystem
URL Illuminate\Routing\UrlGenerator url
Validator Illuminate\Validation\Factory validator
Validator (Instance) Illuminate\Validation\Validator
View Illuminate\View\Factory view
View (Instance) Illuminate\View\View
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)