W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
為你自己的應(yīng)用程序或擴(kuò)展包建立 facade 是很簡(jiǎn)單的。你只需要 3 個(gè)東西:
一個(gè)服務(wù)容器綁定。
一個(gè) facade 類。
一個(gè) facade 別名配置。
讓我們來看個(gè)例子。這里有一個(gè)定義為 PaymentGateway\Payment 的類。
namespace PaymentGateway;
class Payment {
public function process()
{
//
}
}
我們需要可以從服務(wù)容器解析出這個(gè)類。所以,讓我們來加上一個(gè)綁定到服務(wù)提供者:
App::bind('payment', function()
{
return new \PaymentGateway\Payment;
});
注冊(cè)這個(gè)綁定的好方式是建立新的 服務(wù)提供者 命名為 PaymentServiceProvider,并把這個(gè)綁定加到 register 方法。然后你可以配置 Laravel 從 config/app.php 配置文件加載你的服務(wù)提供者。
接下來,我們可以建立我們自己的 facade 類:
use Illuminate\Support\Facades\Facade;
class Payment extends Facade {
protected static function getFacadeAccessor() { return 'payment'; }
}
最后,如果我們希望,可以在 config/app.php 配置文件為 facade 加個(gè)別名到 aliases 數(shù)組。現(xiàn)在我們可以在 Payment 類的實(shí)例上調(diào)用 process 方法。
Payment::process();
在 aliases 數(shù)組中的類在某些實(shí)例中不能使用,因?yàn)?PHP 將不會(huì)嘗試去自動(dòng)加載未定義的類型提示類。如果 \ServiceWrapper\ApiTimeoutException 命別名為 ApiTimeoutException,即便有異常被拋出,在 \ServiceWrapper 命名空間外面的 catch(ApiTimeoutException $e) 將永遠(yuǎn)捕捉不到異常。類似的問題在有類型提示的別名類一樣會(huì)發(fā)生。唯一的替代方案就是放棄別名并用 use 在每一個(gè)文件的最上面引入你希望類型提示的類。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: