門面 - laravel 5.3
門面:作為laravel伺服器容器中底層類的“靜態代理”。
門面的載入過程:
- 如:我們在使用View門面,渲染檢視時(當然可以使用輔助函式view()其實都是一樣的)
use Illuminate\Support\Facades\View;
View::make('','','');
當程式執行到View::make()門面時,就會去載入Illuminate\Support\Facades\View
我們看看Illuminate\Support\Facades\View時如何定義的???
<?php
namespace Illuminate\Support\Facades;
/**
* @see \Illuminate\View\Factory
*/
class View extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'view';
}
}
沒錯,子定義了一個getFacadeAccessor靜態方法。(該方法的作用是:返回View在伺服器容器中繫結的名稱,便於後面解析)
更多的系統定義的門面都在這裡:
我們知道Illuminate\Support\Facades\View只定義了一個getFacadeAccessor靜態方法,但是View繼承(extends)Facade類(該類是所有門面必須繼承的,它主要是引導門面的作用)
我們知道php的魔術方法,當需要載入的方法不存在時,會去指定__callStatic(args);args傳遞引數;
<?php
namespace Illuminate\Support\Facades;
use Mockery;
use RuntimeException;
use Mockery\MockInterface;
abstract class Facade
{
/**
* Handle dynamic, static calls to the object.
*
* @param string $method
* @param array $args
* @return mixed
*
* @throws \RuntimeException
*/
public static function __callStatic($method, $args)
{
$instance = static::getFacadeRoot();
if (! $instance) {
throw new RuntimeException('A facade root has not been set.');
}
return $instance->$method(...$args);
}
/**
* Get the root object behind the facade.
*
* @return mixed
*/
public static function getFacadeRoot()
{
//> 由於View的getFacadeAccessor覆蓋了該方法,該返回名稱
return static::resolveFacadeInstance(static::getFacadeAccessor());
}
}
/**
* Resolve the facade root instance from the container.
*
* @param string|object $name
* @return mixed
*/
protected static function resolveFacadeInstance($name)
{
if (is_object($name)) {
return $name;
}
//> 如果當前門面被解析過,直接從$resolvedInstance屬性中提取
if (isset(static::$resolvedInstance[$name])) {
return static::$resolvedInstance[$name];
}
//> 第一次被解析,從伺服器容器中提取,並呼叫指定的方法
return static::$resolvedInstance[$name] = static::$app[$name];
}
相關文章
- Laravel 核心--深入剖析 Laravel 框架門面模式Laravel框架模式
- 遺失得 Laravel 設計模式-門面模式Laravel設計模式
- Laravel 服務提供者和門面模式Laravel模式
- Laravel 框架門面 Facade 原始碼分析Laravel框架原始碼
- laravel5.3 vue 實現收藏夾功能LaravelVue
- Laravel 控制反轉和門面模式概念詳解Laravel模式
- 草稿 8 Laravel Facade 門面類載入原理Laravel
- 分享一個 Laravel 5.3 搭建的簡單部落格Laravel
- Laravel5.3 Passport API 認證 密碼模式使用LaravelPassportAPI密碼模式
- 記一次給 Laravel 5.3 的 Route 動手術Laravel
- Hello Laravel! Laravel 入門教程Laravel
- Laravel 開發入門課程基礎頁面實現總結Laravel
- 基於 Laravel5.3 的個人部落格重構完成Laravel
- 使用 larainvite 為 Laravel 5.3 應用新增邀請註冊功能AIViteLaravel
- Laravel 5.3 自帶多許可權登入正確姿勢Laravel
- 門面模式模式
- 5.3
- 3分鐘短文:素未謀面,Laravel資料庫模型初階入門Laravel資料庫模型
- Laravel Web 實戰入門每章課程總結 - 4.優化頁面LaravelWeb優化
- Laravel 配合 puppeteer 抓取 SPA 頁面Laravel
- Laravel diary_靜態頁面Laravel
- Laravel Web 實戰入門每章課程總結 - 4.最佳化頁面LaravelWeb
- laravel 500頁面不能正常訪問Laravel
- 關於門面模式模式
- 使用laravel inertia開發體驗頁面Laravel
- Laravel頁面靜態化最佳實踐Laravel
- Laravel 測試: PHPUnit 入門教程LaravelPHP
- Laravel入門(安裝部署篇)Laravel
- laravel入門教程讀後感Laravel
- 最適合入門的 Laravel 入門教程 (四)Laravel
- 最適合入門的 Laravel 入門教程 (五)Laravel
- 終於來了!結合 Laravel 5.3 + vue 2.1 元件化開發的部落格系統LaravelVue元件化
- Laravel 搭建 Composer 包,實現配置 Config、門面 Facade、服務 Service、釋出到 packagistLaravel
- Laravel 入門到進階-推薦Laravel
- 門面模式,介面卡模式模式
- Laravel 第四張學習——優化頁面(1)Laravel優化
- Laravel 裡面用swoole的協程go報錯 ?LaravelGo
- ACM – 5.3 排序檢索ACM排序