【Laravel5.2翻譯】門面


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

思維導圖

簡介

門面為應用服務器內可用的類提供了“靜態”接口。Laravel裝載了許多門面,你可能都沒意識到自己正在使用它們!Laravel的門面為服務容器中的基礎類提供了”靜態代理”,提供了簡潔形象的語法,讓我們維護起來比傳統靜態方法更靈活可測。

使用面門

在Laravel的上下文中,facade就是一個類,它提供了容器中對象的訪問入口。讓它工作的核心就是Facade類。Laravel的門面和任何自定義的門面都要繼承Illuminate\Support\Facades\Facade類。

facade類只需要實現一個方法:getFacadeAccessorgetFacdeAccessor方法的職責就是定義從容器中解析什么。門面的基類使用__callStatic()魔術方法來延時從facade中調用被解析的對象。
在下面的例子中,調用了Laravel緩存系統。初看之下,你可能會覺得Cache類的靜態方法get被調用了

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

注意我們在文件頭上導入的Cache門面,這個門面作為一個代理來訪問Illuminate\Contracts\Factory接口的基礎實現。任何時候我們調用門面都將會傳遞給Laravel緩存服務的基礎實現。
如果我們看下Illuminate\Support\Facades\Cache類,你將看到里面沒有靜態方法get:

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

取而代之的,Cache門面繼承了Facade類然后定義了getFacadeAccessor。記住,這個方法的職責是返回服務容器綁定名。當用到Cache門面的任何靜態方法,Laravel會從服務容器中解析cache綁定然后運行請求的對象方法(這里是get)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 介紹 Facades 為應用的 IoC 服務容器 的類提供了一個靜態的接口。Laravel 里面自帶了一些 Fac...
    伊Summer閱讀 11,099評論 0 11
  • 過去做事情急,什么東西拿起來就用,不喜歡進行系統性的學習,造成在使用過程中的錯誤和低效,現在感覺自己耐心多了,用之...
    馬文Marvin閱讀 2,022評論 0 10
  • 先說幾句廢話,調和氣氛。事情的起由來自客戶需求頻繁變更,偉大的師傅決定橫刀立馬的改革使用新的框架(created ...
    wsdadan閱讀 3,091評論 0 12
  • Laravel 的核心概念包括:服務容器、服務提供者、門面(Facades)、契約(Contracts)。 服務容...
    胖福哥閱讀 2,807評論 0 24
  • Facade 布局是在面向對象編程中經常使用的一種軟件設計布局方式。Facade 實際上是一種包括復雜函數庫的類,...
    OneAPM閱讀 1,495評論 0 15