首頁  >  文章  >  php框架  >  laravel門面有什麼用

laravel門面有什麼用

WBOY
WBOY原創
2022-02-15 11:08:512023瀏覽

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

laravel門面有什麼用

本教學操作環境:windows10系統、Laravel6版,DELL G3電腦。

laravel門面有什麼用

介紹

#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(&#39;photos&#39;);
        //
    }
}

建立Facades

建立Facade 只需要三個東西:

  • #一個IoC 綁定。

  • 一個 Facade 類別。

  • 一個 Facade 別名的設定。

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

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

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

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

去註冊這個綁定最好的方法就是去建立一個新的Service Provider ,把它命名為PaymentServiceProvider ,然後把它綁定到register方法上。再去設定 laravel 在 config/app.php 這個設定檔裡載入你的 Service Provider。

下一步就是去建立自己的Facade 類別:

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

最後,如果你願意,可以去為Facade 增加一個別名,放到config/app.php 設定檔裡的aliases 陣列裡。

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

Payment::process();

【相關推薦:

laravel影片教學#

以上是laravel門面有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn