【Laravel5.2翻譯】門面


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

思維導(dǎo)圖

簡介

門面為應(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)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 介紹 Facades 為應(yīng)用的 IoC 服務(wù)容器 的類提供了一個靜態(tài)的接口。Laravel 里面自帶了一些 Fac...
    伊Summer閱讀 11,180評論 0 11
  • 過去做事情急,什么東西拿起來就用,不喜歡進行系統(tǒng)性的學(xué)習(xí),造成在使用過程中的錯誤和低效,現(xiàn)在感覺自己耐心多了,用之...
    馬文Marvin閱讀 2,082評論 0 10
  • 先說幾句廢話,調(diào)和氣氛。事情的起由來自客戶需求頻繁變更,偉大的師傅決定橫刀立馬的改革使用新的框架(created ...
    wsdadan閱讀 3,197評論 0 12
  • Laravel 的核心概念包括:服務(wù)容器、服務(wù)提供者、門面(Facades)、契約(Contracts)。 服務(wù)容...
    胖福哥閱讀 2,872評論 0 24
  • Facade 布局是在面向?qū)ο缶幊讨薪?jīng)常使用的一種軟件設(shè)計布局方式。Facade 實際上是一種包括復(fù)雜函數(shù)庫的類,...
    OneAPM閱讀 1,571評論 0 15

友情鏈接更多精彩內(nèi)容