Laravel Facades


Facades提供了一個「靜態」的介面到應用程式的服務容器中可用的類。 Laravel 的「facades」作為「靜態代理」在服務容器底層類,提供了一個簡潔, 富有表現的語法,同時保持比傳統的靜態方法更有可測試性和靈活性。

如何建立Facade

以下是在Laravel建立 Facade 的步驟:
  • 第1步 - 建立PHP類檔案
  • 第2步 - 係結類到服務提供者
  • 第3步- 註冊服務提供者到 Config\app.php 作為供應者
  • 第4步- 建立類,這個類是擴充套件lluminate\Support\Facades\Facade
  • 第5步- 註冊第4點到 Config\app.php 作為別名

Facade類參考

Laravel附帶許多Facades。下面是內建的Facades類參照。
Facade
服務容器系結
App Illuminate\Foundation\Application app
Artisan Illuminate\Contracts\Console\Kernel artisan
Auth Illuminate\Auth\AuthManager auth
Auth (Instance) Illuminate\Auth\Guard

Blade Illuminate\View\Compilers\BladeCompiler blade.compiler
Bus Illuminate\Contracts\Bus\Dispatcher

Cache Illuminate\Cache\Repository cache
Config Illuminate\Config\Repository config
Cookie Illuminate\Cookie\CookieJar cookie
Crypt Illuminate\Encryption\Encrypter encrypter
DB Illuminate\Database\DatabaseManager db
DB (Instance) Illuminate\Database\Connection

Event Illuminate\Events\Dispatcher events
File Illuminate\Filesystem\Filesystem files
Gate Illuminate\Contracts\Auth\Access\Gate

Hash Illuminate\Contracts\Hashing\Hasher hash
Input Illuminate\Http\Request request
Lang Illuminate\Translation\Translator translator
Log Illuminate\Log\Writer log
Mail Illuminate\Mail\Mailer mailer
Password Illuminate\Auth\Passwords\PasswordBroker auth.password
Queue Illuminate\Queue\QueueManager queue
Queue (Instance) Illuminate\Queue\QueueInterface

Queue (Base Class) Illuminate\Queue\Queue

Redirect Illuminate\Routing\Redirector redirect
Redis Illuminate\Redis\Database redis
Request Illuminate\Http\Request request
Response Illuminate\Contracts\Routing\ResponseFactory

Route Illuminate\Routing\Router router
Schema Illuminate\Database\Schema\Blueprint

Session Illuminate\Session\SessionManager session
Session (Instance) Illuminate\Session\Store

Storage Illuminate\Contracts\Filesystem\Factory filesystem
URL Illuminate\Routing\UrlGenerator url
Validator Illuminate\Validation\Factory validator
Validator (Instance) Illuminate\Validation\Validator

View Illuminate\View\Factory view
View (Instance) Illuminate\View\View

範例

第1步- 執行以下命令建立一個叫作 TestFacadesServiceProvider 的服務提供者。
php artisan make:provider TestFacadesServiceProvider
第2步 - 成功執行後,您會收到以下輸出 -

第3步 - 在「App/Test」建立一個名為 「TestFacades.php」的類

App/Test/TestFacades.php

<?php
namespace App\Test;

class TestFacades{
   public function testingFacades(){
      echo "Testing the Facades in Laravel.";
   }
}
第4步 - 在「App/Test/Facades」建立一個名為「TestFacades.php」 的一個Facade類。

App/Test/Facades/TestFacades.php

<?php
namespace app\Test\Facades;
use Illuminate\Support\Facades\Facade;

class TestFacades extends Facade{
   protected static function getFacadeAccessor() { return 'test'; }
}
第5步- 在「App/Test/Facades」建立一個名為 「TestFacadesServiceProviders.php」的一個Facade類。

App/Providers/TestFacadesServiceProvider.php

<?php
namespace App\Providers;
use App;
use Illuminate\Support\ServiceProvider;

class TestFacadesServiceProvider extends ServiceProvider {
   public function boot() {
      //
   }
   public function register() {
      App::bind('test',function() {
         return new \App\Test\TestFacades;
      });
   }
}
第6步 - 在檔案 config/app.php 中新增一個服務提供者如圖所示如下圖。

config/app.php


第7步 - 在檔案 config/app.php 中新增別名如圖所示如下圖。

config/app.php


'TestFacades' => App\Test\Facades\TestFacades::class, 

第8步 - 新增以下行到檔案 - app/Http/routes.php

app/Http/routes.php

Route::get('/facadeex', function(){
   return TestFacades::testingFacades();
});
第9步 - 存取以下網址測試 Facade

http://localhost:8000/facadeex

第10步 - 存取URL後,您會收到以下輸出 -