溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

laravel門面的作用是什么

發(fā)布時間:2022-02-15 11:34:46 來源:億速云 閱讀:172 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“l(fā)aravel門面的作用是什么”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“l(fā)aravel門面的作用是什么”這篇文章吧。

在laravel中,門面Facades用于為應用的IoC服務容器的類提供了一個靜態(tài)的接口,Laravel的門面作為服務容器中底層類的靜態(tài)代理,相比于傳統(tǒng)靜態(tài)方法,在維護時能夠提供更加易于測試的語法。

laravel門面的作用是什么

本教程操作環(huán)境:windows10系統(tǒng)、Laravel6版,DELL G3電腦。

laravel門面有什么用

介紹

Facades 為應用的 IoC 服務容器 的類提供了一個靜態(tài)的接口。Laravel 里面自帶了一些 Facades,如Cache等。Laravel 的門面作為服務容器中底層類的“靜態(tài)代理”,相比于傳統(tǒng)靜態(tài)方法,在維護時能夠提供更加易于測試、更加靈活、簡明優(yōu)雅的語法。

解釋

在 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 服務容器 的更方便的語法。

優(yōu)點

Facade 有諸多優(yōu)點,其提供了簡單、易記的語法,讓我們無需記住長長的類名即可使用 Laravel 提供的功能特性,此外,由于他們對 PHP 動態(tài)方法的獨到用法,使得它們很容易測試。

實際使用

下面的例子,去調用了一下 Laravel 的緩存系統(tǒng)。先看一下下面這行代碼,你可能會覺得,這是直接去調用 Cache 這個類上面的一個叫 get 的靜態(tài)的方法。

$value = Cache::get('key');

不過,如果你查看 Illuminate\Support\Facades\Cache 這個類,你會發(fā)現(xiàn)這里根本就沒有 get 這個靜態(tài)方法:

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 上的靜態(tài)方法的時候,Laravel 就會從 Ioc 服務容器 里面去 resolves cache 這個綁定,并且會去執(zhí)行在對象上的這個所請求的方法(這里就是 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');
        //
    }
}

創(chuàng)建 Facades

創(chuàng)建 Facade 只需要三個東西:

  • 一個 IoC 綁定。

  • 一個 Facade 類。

  • 一個 Facade 別名的配置。

在下面我們定義了一個類:PaymentGateway\Payment 。

namespace PaymentGateway;
class Payment {
    public function process()
    {
        //
    }
}

我們需要能在 Ioc 服務容器 里面去 resolve 這個類。所以,先要去添加一個 Service Provider 綁定:

App::bind('payment', function()
{
    return new \PaymentGateway\Payment;
});

去注冊這個綁定最好的方法就是去創(chuàng)建一個新的 Service Provider ,把它命名為 PaymentServiceProvider ,然后把它綁定到 register 方法上。再去配置 laravel 在 config/app.php 這個配置文件里加載你的 Service Provider。

下一步就是去創(chuàng)建自己的 Facade 類:

use Illuminate\Support\Facades\Facade;
class Payment extends Facade {
    protected static function getFacadeAccessor() {
             return 'payment'; 
    }
}

最后,如果你愿意,可以去給 Facade 添加一個別名,放到 config/app.php 配置文件里的 aliases 數組里。

可以去調用 Payment 類的一個實例上的 process 這個方法了。像這樣:

Payment::process();

以上是“l(fā)aravel門面的作用是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI