前陣子看了點Laravel源碼,越看越亂,網(wǎng)上大部分中文文檔都是直譯,比較生澀難懂,還是決定看英文文檔順便就我的理解做下翻譯整理記錄下來

簡介
門面為應(yīng)用服務(wù)器內(nèi)可用的類提供了“靜態(tài)”接口。Laravel裝載了許多門面,你可能都沒意識到自己正在使用它們!Laravel的門面為服務(wù)容器中的基礎(chǔ)類提供了”靜態(tài)代理”,提供了簡潔形象的語法,讓我們維護起來比傳統(tǒng)靜態(tài)方法更靈活可測。
使用面門
在Laravel的上下文中,facade就是一個類,它提供了容器中對象的訪問入口。讓它工作的核心就是Facade類。Laravel的門面和任何自定義的門面都要繼承Illuminate\Support\Facades\Facade類。
facade類只需要實現(xiàn)一個方法:getFacadeAccessor。getFacdeAccessor方法的職責(zé)就是定義從容器中解析什么。門面的基類使用__callStatic()魔術(shù)方法來延時從facade中調(diào)用被解析的對象。
在下面的例子中,調(diào)用了Laravel緩存系統(tǒng)。初看之下,你可能會覺得Cache類的靜態(tài)方法get被調(diào)用了
<?php
namespace App\Http\Controllers;
use Cache;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function showProfile($id)
{
$user = Cache::get('user:'.$id);
return view('profile', ['user' => $user]);
}
}
注意我們在文件頭上導(dǎo)入的Cache門面,這個門面作為一個代理來訪問Illuminate\Contracts\Factory接口的基礎(chǔ)實現(xiàn)。任何時候我們調(diào)用門面都將會傳遞給Laravel緩存服務(wù)的基礎(chǔ)實現(xiàn)。
如果我們看下Illuminate\Support\Facades\Cache類,你將看到里面沒有靜態(tài)方法get:
class Cache extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() { return 'cache'; }
}
取而代之的,Cache門面繼承了Facade類然后定義了getFacadeAccessor。記住,這個方法的職責(zé)是返回服務(wù)容器綁定名。當用到Cache門面的任何靜態(tài)方法,Laravel會從服務(wù)容器中解析cache綁定然后運行請求的對象方法(這里是get)。