在laravel中,門面Facades用於為應用的IoC服務容器的類別提供了一個靜態的接口,Laravel的門面作為服務容器中底層類別的靜態代理,相比於傳統靜態方法,在維護時能夠提供更易於測試的語法。
本教學操作環境:windows10系統、Laravel6版,DELL G3電腦。
介紹
#Facades 為應用的 IoC 服務容器 的類別提供了一個靜態的介面。 Laravel 裡面自備了一些 Facades,如Cache等。 Laravel 的門面作為服務容器中底層類別的“靜態代理”,相比於傳統靜態方法,在維護時能夠提供更易於測試、更加靈活、簡明優雅的語法。
解釋
在Laravel 應用這個上下文裡面,一個Facade 就是一個類,使用這個類可以存取到來自容器裡的一個對象,這個功能就是在Facade類別裡面定義的。 Laravel 的 Facades 還有任何你自己定義的 Facades,都會去繼承 Facade 這個類別。
你的 Facade 類別只需要實作一個的方法:getFacadeAccessor。要在容器裡 resolve 什麼出來,都是在這個方法裡去做的。 Facade 這個基底類別裡面使用了__callStatic() 魔術方法,可以延遲到 resolved 物件上的,來自 Facade 的呼叫。
所以,當你使用 Facade 呼叫的時候,例如像這樣:Cache:get,laravel 會從 Ioc 服務容器 裡面 resolves 快取管理類,然後再去呼叫這個類別上面的 get 方法。 Laravel 的 Facades 可以去定位服務,它是一種使用 Laravel 的 Ioc 服務容器 的更方便的語法。
優點
Facade 有許多優點,其提供了簡單、易記的語法,讓我們無需記住長長的類別名稱即可使用Laravel 提供的功能特性,此外,由於他們對PHP 動態方法的獨到用法,使得它們很容易測試。
實際上使用
下面的例子,去呼叫了一下 Laravel 的快取系統。先看一下下面這行程式碼,你可能會覺得,這是直接去呼叫 Cache 這個類別上面的一個叫 get 的靜態的方法。
$value = Cache::get('key');
不過,如果你查看Illuminate\Support\Facades\Cache 這個類,你會發現這裡根本就沒有get 這個靜態方法:
class Cache extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'cache'; } }
Cache 這個類別繼承了Facade 這個基類,它裡面定義了一個叫做getFacadeAccessor() 的方法。注意,這個方法的乾的事就是去回傳一個 Ioc 綁定的名字,這裡就是 cache。
當使用者在引用任何在Cache 這個Facade 上的靜態方法的時候,Laravel 就會從Ioc 服務容器裡面去resolves cache 這個綁定,並且會去執行在物件上的這個所請求的方法(這裡就是get 這個方法)。
所以,我們在呼叫Cache::get 的時候,它的真正的意思是這樣的:
$value = $app->make('cache')->get('key');
導入Facades
##注意,在使用facade 的時候,如果控制器裡面用到了命名空間,你需要把Facade 類別匯入到這個命名空間裡。所有的Facades 都是在全域命名空間下:<?php namespace App\Http\Controllers; use Cache; class PhotosController extends Controller { /** * Get all of the application photos. * * @return Response */ public function index() { $photos = Cache::get('photos'); // } }
建立Facades
建立Facade 只需要三個東西:namespace PaymentGateway; class Payment { public function process() { // } }
App::bind('payment', function() { return new \PaymentGateway\Payment; });
use Illuminate\Support\Facades\Facade; class Payment extends Facade { protected static function getFacadeAccessor() { return 'payment'; } }
Payment::process();
laravel影片教學】#
以上是laravel門面有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!