鍍金池/ 教程/ PHP/ 門面
門面
Laravel Homestead
安裝及配置
測試
HTTP 中間件
加密
升級指南
幫助函數(shù)
應用目錄結(jié)構(gòu)
集合
新手入門指南-簡單任務管理系統(tǒng)
任務調(diào)度
查詢構(gòu)建器
視圖
驗證
Laravel Cashier(訂購&支付&發(fā)票)
本地化
隊列
調(diào)整器
分頁
文件系統(tǒng)/云存儲
貢獻代碼
哈希
HTTP 控制器
緩存
遷移
HTTP 請求
Laravel Elixir
發(fā)行版本說明
Envoy 任務運行器(SSH任務)
序列化
Session
起步
帶用戶功能的任務管理系統(tǒng)
起步
用戶授權(quán)
郵件
事件
填充數(shù)據(jù)
HTTP 路由
服務提供者
Blade 模板引擎
包開發(fā)
用戶認證
Artisan 控制臺
HTTP 響應
集合
服務容器
關聯(lián)關系
一次請求的生命周期
契約
Redis
錯誤&日志

門面

1、簡介

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

2、使用門面

在 Laravel 應用的上下文中,門面就是一個提供訪問容器中對象的類。該機制原理由Facade 類實現(xiàn),Laravel 自帶的門面,以及你創(chuàng)建的自定義門面,都會繼承自 Illuminate\Support\Facades\Facade 基類。 門面類只需要實現(xiàn)一個方法:getFacadeAccessor。正是 getFacadeAccessor方法定義了從容器中解析什么,然后 Facade 基類使用魔術方法從你的門面中調(diào)用解析對象。

下面的例子中,我們將會調(diào)用 Laravel 的緩存系統(tǒng),瀏覽代碼后,也許你會覺得我們調(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]);
    }
}

注意我們在頂部位置引入了 Cache 門面。該門面作為代理訪問底層 Illuminate\Contracts\Cache\Factory接口的實現(xiàn)。我們對門面的所有調(diào)用都會被傳遞給 Laravel 緩存服務的底層實例。

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

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

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

3、門面類列表

下面列出了每個門面及其對應的底層類,這對深入給定根門面的 API 文檔而言是個很有用的工具。服務容器綁定鍵也被包含進來:

http://wiki.jikexueyuan.com/project/laravel-5.1/images/3.png" alt="" />

上一篇:關聯(lián)關系下一篇:契約