看了一些laravel中facades的一些文檔,大致有些瞭解,但有一點問題想請教大家
app.php的aliasse中
'Request' => 'Illuminate\Support\Facades\Request',
我是這樣理解的,相當於運行了vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php,主要語句就是其中的一句
protected static function getFacadeAccessor() { return 'request'; }
要使這個facades起作用,還要綁定到服務提供者,也就是要執行App::bind()
這個函數,但查了一遍代碼,沒發現哪裡出現過。
請問這個facades綁定到服務提供者的代碼在哪裡,或者說是其它的實現方式。謝謝!
回複內容:
看了一些laravel中facades的一些文檔,大致有些瞭解,但有一點問題想請教大家
app.php的aliasse中
'Request' => 'Illuminate\Support\Facades\Request',
我是這樣理解的,相當於運行了vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php,主要語句就是其中的一句
protected static function getFacadeAccessor() { return 'request'; }
要使這個facades起作用,還要綁定到服務提供者,也就是要執行App::bind()
這個函數,但查了一遍代碼,沒發現哪裡出現過。
請問這個facades綁定到服務提供者的代碼在哪裡,或者說是其它的實現方式。謝謝!
相關代碼都在同一個檔案夾下的Facade類裡面
粗看了一下 應該是resolveFacadeInstance把全域容器中的變數綁定到這裡的作為對象緩衝的靜態成員resolvedInstance中的
__callStatic->getFacadeRoot->resolveFacadeInstance&getFacadeAccessor
是不是在public/index.php中直接使用了?
Illuminate/Foundation/Application.php
Facades 只是提供個快速存取的代理,註冊並不在這裡。