亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

Laravel核心解讀Facades

2020-03-22 19:02:52
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了關于Laravel核心解讀Facades,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

什么是Facades

Facades是我們在Laravel應用開發中使用頻率很高的一個組件,叫組件不太合適,其實它們是一組靜態類接口或者說代理,讓開發者能簡單的訪問綁定到服務容器里的各種服務。Laravel文檔中對Facades的解釋如下:

Facades 為html' target='_blank'>應用程序的 服務容器 中可用的類提供了一個「靜態」接口。Laravel 本身附帶許多的 facades,甚至你可能在不知情的狀況下已經在使用他們!Laravel 「facades」作為在服務容器內基類的「靜態代理」,擁有簡潔、易表達的語法優點,同時維持著比傳統靜態方法更高的可測試性和靈活性。

我們經常用的Route就是一個Facade, 它是/Illuminate/Support/Facades/Route類的別名,這個Facade類代理的是注冊到服務容器里的router服務,所以通過Route類我們就能夠方便地使用router服務中提供的各種服務,而其中涉及到的服務解析完全是隱式地由Laravel完成的,這在一定程度上讓應用程序代碼變的簡潔了不少。下面我們會大概看一下Facades從被注冊進Laravel框架到被應用程序使用這中間的流程。Facades是和ServiceProvider緊密配合的所以如果你了解了中間的這些流程對開發自定義Laravel組件會很有幫助。

注冊Facades

說到Facades注冊又要回到再介紹其它核心組建時提到過很多次的Bootstrap階段了,在讓請求通過中間件和路由之前有一個啟動應用程序的過程:

//Class: /Illuminate/Foundation/Http/Kernelprotected function sendRequestThroughRouter($request) $this- app- instance( request , $request); Facade::clearResolvedInstance( request  $this- bootstrap(); return (new Pipeline($this- app)) - send($request) - through($this- app- shouldSkipMiddleware() ? [] : $this- middleware) - then($this- dispatchToRouter());//引導啟動Laravel應用程序public function bootstrap() if (! $this- app- hasBeenBootstrapped()) { /**依次執行$bootstrappers中每一個bootstrapper的bootstrap()函數 $bootstrappers = [ Illuminate/Foundation/Bootstrap/DetectEnvironment , Illuminate/Foundation/Bootstrap/LoadConfiguration , Illuminate/Foundation/Bootstrap/ConfigureLogging , Illuminate/Foundation/Bootstrap/HandleExceptions , Illuminate/Foundation/Bootstrap/RegisterFacades , Illuminate/Foundation/Bootstrap/RegisterProviders , Illuminate/Foundation/Bootstrap/BootProviders , ];*/ $this- app- bootstrapWith($this- bootstrappers());}

在啟動應用的過程中Illuminate/Foundation/Bootstrap/RegisterFacades這個階段會注冊應用程序里用到的Facades。

class RegisterFacades * Bootstrap the given application. * @param /Illuminate/Contracts/Foundation/Application $app * @return void public function bootstrap(Application $app) Facade::clearResolvedInstances(); Facade::setFacadeApplication($app); AliasLoader::getInstance(array_merge( $app- make( config )- get( app.aliases , []), $app- make(PackageManifest::class)- aliases() ))- register();}

在這里會通過AliasLoader類的實例將為所有Facades注冊別名,Facades和別名的對應關系存放在config/app.php文件的$aliases數組中

 aliases = [ App = Illuminate/Support/Facades/App::class, Artisan = Illuminate/Support/Facades/Artisan::class, Auth = Illuminate/Support/Facades/Auth::class, ...... Route = Illuminate/Support/Facades/Route::class, ......]

看一下AliasLoader里是如何注冊這些別名的

// class: Illuminate/Foundation/AliasLoaderpublic static function getInstance(array $aliases = []) if (is_null(static::$instance)) { return static::$instance = new static($aliases); $aliases = array_merge(static::$instance- getAliases(), $aliases); static::$instance- setAliases($aliases); return static::$instance;public function register() if (! $this- registered) { $this- prependToLoaderStack(); $this- registered = true;protected function prependToLoaderStack() // 把AliasLoader::load()放入自動加載函數隊列中,并置于隊列頭部 spl_autoload_register([$this, load ], true, true);}

通過上面的代碼段可以看到AliasLoader將load方法注冊到了SPL __autoload函數隊列的頭部??匆幌耹oad方法的源碼:

public function load($alias) if (isset($this- aliases[$alias])) { return class_alias($this- aliases[$alias], $alias);}

在load方法里$aliases配置里的Facade類創建了對應的別名,比如當我們使用別名類Route時PHP會通過AliasLoader的load方法為把Illuminate/Support/Facades/Route::class類創建一個別名類Route,所以我們在程序里使用別Route其實使用的就是`Illuminate/Support/Facades/Route類。

解析Facade代理的服務

把Facades注冊到框架后我們在應用程序里就能使用其中的Facade了,比如注冊路由時我們經常用Route::get( /uri , Controller@action);,那么Route是怎么代理到路由服務的呢,這就涉及到在Facade里服務的隱式解析了, 我們看一下Route類的源碼:

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美丝袜一区二区| 亚洲成av人片在线观看香蕉| 在线观看成人黄色| 国产精品手机播放| 日韩欧美在线视频免费观看| 亚洲xxxx做受欧美| 亚洲国产精品嫩草影院久久| 国产精品男人的天堂| 国产视频精品一区二区三区| 尤物yw午夜国产精品视频| 欧美高清视频一区二区| 久久亚洲私人国产精品va| 日韩在线观看网址| 狠狠躁夜夜躁人人躁婷婷91| 欧美日韩一区二区三区在线免费观看| www欧美xxxx| 欧美日韩一区二区在线| 青草热久免费精品视频| 国产偷国产偷亚洲清高网站| 日韩高清有码在线| 日韩中文字幕国产| 麻豆一区二区在线观看| 亚洲品质视频自拍网| 色综合伊人色综合网| 日韩a**中文字幕| 欧美日韩国产123| 91精品国产综合久久香蕉的用户体验| 深夜福利亚洲导航| 欧美资源在线观看| 欧美亚洲成人精品| 亚洲精品一区二区网址| 色视频www在线播放国产成人| 欧美一级在线播放| 欧美国产亚洲视频| 国产精品va在线播放我和闺蜜| 亚洲欧美在线看| 亚洲色图色老头| 在线看片第一页欧美| 最新69国产成人精品视频免费| 亚洲综合第一页| 国产精品私拍pans大尺度在线| 懂色av影视一区二区三区| 亚洲tv在线观看| 国产在线观看一区二区三区| 亚洲欧美日韩国产中文专区| 中文字幕亚洲字幕| 亚洲成人三级在线| 国产精品96久久久久久又黄又硬| 欧美一级在线播放| 久久久成人的性感天堂| 成人免费xxxxx在线观看| 日韩成人av一区| 亚洲精品视频免费在线观看| 欧美大秀在线观看| 亚洲精品v欧美精品v日韩精品| 中文字幕欧美日韩精品| 日韩av大片免费看| 一区二区三区无码高清视频| www高清在线视频日韩欧美| 国产精品久久久久久久久久三级| 日韩精品视频免费在线观看| 亚洲精品色婷婷福利天堂| 亚洲天堂男人天堂| 国内精品国产三级国产在线专| 久久天天躁狠狠躁夜夜爽蜜月| 欧美在线www| 国产成人精品视| 琪琪亚洲精品午夜在线| 欧美制服第一页| 国产69久久精品成人看| 国产精品视频在线观看| 久久国产精品网站| 色小说视频一区| 最近2019年好看中文字幕视频| 欧美日韩中国免费专区在线看| 国产精品久久久久久搜索| 曰本色欧美视频在线| 这里只有视频精品| 亚洲二区在线播放视频| 国产精品三级久久久久久电影| 九九热这里只有精品6| 国产成人av在线播放| 欧美一级淫片videoshd| 日韩第一页在线| 亚洲精品福利免费在线观看| 91精品在线一区| 成人免费黄色网| 精品久久久久久中文字幕大豆网| 亚洲性视频网站| 欧美一区二区三区免费观看| 亚洲人成在线一二| 亚洲午夜久久久影院| 日日骚久久av| 视频在线一区二区| 亚洲综合社区网| 欧美激情视频免费观看| 欧美—级高清免费播放| 欧美性极品xxxx娇小| 国产精品一区二区三区在线播放| 亚洲最新视频在线| 国产主播精品在线| 黑人与娇小精品av专区| 日韩免费中文字幕| 5566日本婷婷色中文字幕97| 亚洲国产又黄又爽女人高潮的| 黑人精品xxx一区| 亚洲欧洲国产一区| 欧美激情第一页xxx| 欧美视频中文在线看| 九九热精品在线| 亚洲美女免费精品视频在线观看| 91九色精品视频| 亚洲国产精品yw在线观看| 久久久国产影院| 51精品国产黑色丝袜高跟鞋| 久久伊人免费视频| 亚洲第一二三四五区| 国产日韩在线亚洲字幕中文| 亚洲精品自产拍| 亚洲色图偷窥自拍| 成人信息集中地欧美| 亚洲欧美中文字幕在线一区| zzijzzij亚洲日本成熟少妇| 国产精品久久中文| 久久久久久久亚洲精品| 亚洲日本欧美日韩高观看| 欧美精品18videos性欧| 最新国产精品亚洲| 国产精品偷伦一区二区| 91高清视频免费观看| 精品视频一区在线视频| 91精品国产综合久久香蕉922| 精品中文字幕在线2019| 8090成年在线看片午夜| 欧美天堂在线观看| 久久久久久这里只有精品| 国产成人中文字幕| 欧美极品美女视频网站在线观看免费| 亚洲石原莉奈一区二区在线观看| 国产美女扒开尿口久久久| 国产精品视频大全| 亚洲国产97在线精品一区| 热门国产精品亚洲第一区在线| 亚洲国产高清高潮精品美女| 91午夜在线播放| 日韩av日韩在线观看| 狠狠躁夜夜躁人人爽天天天天97| 国产精品视频一| 亚洲日韩第一页| 98午夜经典影视| 91欧美精品午夜性色福利在线| 久久夜精品va视频免费观看| 成人黄色片网站| 日韩av在线网址| 日韩电影中文字幕| 情事1991在线| 日韩亚洲成人av在线| 国产视频精品一区二区三区| 日韩av在线网站| 2018日韩中文字幕| 欧美亚洲国产日韩2020| 久久久久久国产精品三级玉女聊斋| 亚洲精品ady| 欧美精品精品精品精品免费|