日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

核心概念 —— 门面(Facades)

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 核心概念 —— 门面(Facades) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1、簡介

為應用的中的綁定類提供了一個“靜態”接口。 內置了很多門面,你可能在不知道的情況下正在使用它們。Laravel 的門面作為中的底層類的“靜態代理”,相比于傳統,在維護時能夠提供更加易于測試、更加靈活的、簡明且富有表現力的語法。

Laravel的所有門面都定義在 Illuminate\Support\s 命名空間下,所以我們可以輕松訪問到門面:

use Illuminate\Support\Facades\Cache;Route::get('/cache', function () {return Cache::get('key'); });

在整個Laravel中,很多例子使用了門面來演示框架的各種功能特性

2、何時使用門面

門面有諸多優點,其提供了簡單、易記的語法,讓我們無需記住長長的類名即可使用Laravel提供的功能特性,此外,由于他們對PHP動態方法的獨特用法,使得它們很容易測試。

但是,使用門面也有需要注意的地方,一個最主要的危險就是類范圍蠕變。由于門面如此好用并且不需要注入,在單個類中使用過多門面,會讓類很容易變得越來越大。使用依賴注入則會讓此類問題緩解,因為一個巨大的構造函數會讓我們很容易判斷出類在變大。因此,使用門面的時候要尤其注意類的大小,以便控制其有限職責。

注:構建與Laravel交互的第三方擴展包時,最好注入Laravel契約而不是使用門面,因為擴展包在Laravel之外構建,你將不能訪問Laravel的門面測試輔助函數。

門面 vs 依賴注入

依賴注入的最大優點是可以替換注入類的實現,這在測試時很有用,因為你可以注入一個模擬或存根并且在存根上斷言不同的方法。

但是在靜態類方法上進行模擬或存根卻行不通,不過,由于門面使用了動態方法對服務容器中解析出來的對象方法調用進行了代理,我們也可以像測試注入類實例那樣測試門面。例如,給定以下路由:

use Illuminate\Support\Facades\Cache;Route::get('/cache', function () {return Cache::get('key'); });

我們可以這樣編寫測試來驗證 Cache::get 方法以我們期望的方式被調用:

use Illuminate\Support\Facades\Cache;/*** A basic functional test example.** @return void*/ public function testBasicExample() {Cache::shouldReceive('get')->with('key')->andReturn('value');$this->visit('/cache')->see('value'); }
門面 vs 輔助函數

除了門面之外,Laravel還內置了許多輔助函數用于執行通用任務,比如生成視圖、觸發事件、分配任務,以及發送HTTP響應等。很多輔助函數提供了和響應門面一樣的功能,例如,下面這個門面調用和輔助函數調用是等價的:

return View::make('profile'); return view('profile');

門面和輔助函數并不實質性差別,使用輔助函數的時候,可以像測試相應門面那樣測試它們。例如,給定以下路由:

Route::get('/cache', function () {return cache('key'); });

在調用底層, cache 方法會去調用 Cache 門面上的 get 方法,因此,盡管我們使用這個輔助函數,我們還是可以編寫如下測試來驗證這個方法以我們期望的方式和參數被調用:

use Illuminate\Support\Facades\Cache;/*** A basic functional test example.** @return void*/ public function testBasicExample() {Cache::shouldReceive('get')->with('key')->andReturn('value');$this->visit('/cache')->see('value'); }
3、門面工作原理

在 Laravel 應用中,門面就是一個為容器中對象提供訪問方式的類。該機制原理由 Facade 類實現。Laravel 自帶的門面,以及我們創建的自定義門面,都會繼承自 Illuminate\Support\Facades\Facade 基類。

門面類只需要實現一個方法:getFacadeAccessor。正是 getFacadeAccessor 方法定義了從容器中解析什么,然后Facade 基類使用魔術方法 __callStatic() 從你的門面中調用解析對象。

下面的例子中,我們將會調用 Laravel 的緩存系統,瀏覽代碼后,也許你會覺得我們調用了 Cache 的靜態方法 get:

<?phpnamespace 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 接口的實現。我們對門面的所有調用都會被傳遞給 Laravel 緩存服務的底層實例。

如果我們查看 Illuminate\Support\Facades\Cache 類的源碼,將會發現其中并沒有靜態方法 get:

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

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

4、門面類列表

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

門面

服務容器綁定

App

app

Artisan

artisan

Auth

auth

Blade

blade.compiler

Bus

Cache

cache

Config

config

Cookie

cookie

Crypt

encrypter

DB

db

DB (Instance)

Event

events

File

files

Gate

Hash

hash

Lang

translator

Log

log

Mail

mailer

Password

auth.password

Queue

queue

Queue (Instance)

queue

Queue (Base Class)

Redirect

redirect

Redis

redis

Request

request

Response

Route

router

Schema

Session

session

Session (Instance)

Storage

filesystem

URL

url

Validator

validator

Validator (Instance)

View

view

View (Instance)

轉載于:https://www.cnblogs.com/zhengyanbin2016/p/6008067.html

總結

以上是生活随笔為你收集整理的核心概念 —— 门面(Facades)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91porny首页入口| 在线观看一区二区视频 | 亚洲永久免费观看 | 91亚州 | 在线精品一区二区 | 欧日韩视频| 免费视频中文字幕 | 欧美午夜精品理论片a级按摩 | 国产精品一区二区麻豆 | 丰满少妇被猛烈进入无码 | 国产成人精品av久久 | 成年人免费网站 | 欧美特级一级片 | 国产嫩草av| 欧美激情va永久在线播放 | 性高湖久久久久久久久免费 | 午夜视频 | 九色精品在线 | 欧美性大战久久久久xxx | 亚洲国产精品影院 | 丰满的人妻hd高清日本 | 成都电影免费大全 | 性福利视频 | 国产夫妻在线观看 | 美国av导航| a级片视频网站 | 国产精品亚洲一区二区三区 | 一级片久久久 | 国产一级片免费 | 精品国产乱码久久久久久浪潮 | 日本美女日批视频 | 国产一区二区视频在线免费观看 | 在线观看国产91 | 亚洲一二三区av | 久久国产精品无码网站 | 男女男精品视频站 | av大片网址 | 国产黄色一区 | 久久久久久久黄色片 | 国产人妖一区 | 日韩 国产 欧美 | 最近中文字幕在线视频 | 天堂网在线观看 | 女厕厕露p撒尿八个少妇 | 91老肥熟| 亚洲 在线| 无套日出白浆 | 国产精品观看 | 看片久久 | 成人免费观看网址 | 色综合久久中文字幕无码 | 国产日韩欧美电影 | 黄色裸体视频 | 久热免费在线视频 | 欧美少妇一级片 | 精品产国自在拍 | 四虎免费观看 | 日韩一区二区免费看 | 精品96久久久久久中文字幕无 | 成人免费黄色网址 | 毛片www | 国产吃瓜黑料一区二区 | 六月丁香婷婷激情 | 女人和拘做爰正片视频 | 欧美成人hd | 樱空桃在线观看 | 祥仔视觉av | 黄色午夜网站 | 久久久久久国产精品三级玉女聊斋 | 欧美a性 | 亚洲色图日韩 | 欧美日韩视频在线播放 | 97久久综合| 午夜av剧场 | 亚洲国产精品成人av | 亚洲精品国产av | 免费在线一级片 | 激情午夜天 | 九色在线 | 香蕉视频影院 | 豆豆色成人网 | 亚洲精品乱码久久久久久蜜桃动漫 | 97国产免费 | 日韩欧美在线第一页 | 爱爱小视频免费看 | 高清视频免费在线观看 | 黄色在线免费观看 | 天天插天天狠 | 91插插插插插插插 | 暖暖成人免费视频 | 99久久成人| 男人日女人免费视频 | 3d欧美精品动漫xxxx无尽 | 国产一区二区a | 亚洲精品国产精品乱码不卡 | 国内成人av | 强乱中文字幕av一区乱码 | 极品国产一区 | 精品成人18|