Laravel - 门面 (Facades)



门面提供了一个静态接口,用于访问应用服务容器中提供的类。Laravel 的门面充当服务容器中底层类的静态代理,在保持比传统静态方法更高的可测试性和灵活性的同时,提供了简洁、富有表现力的语法。

如何创建门面

以下是创建 Laravel 门面的步骤:

  • 步骤 1 - 创建 PHP 类文件。

  • 步骤 2 - 将该类绑定到服务提供者。

  • 步骤 3 - 将服务提供者注册到

    Config\app.php 作为提供者。

  • 步骤 4 - 创建一个类,该类继承自

    Illuminate\Support\Facades\Facade。

  • 步骤 5 - 将步骤 4 中的类注册到 Config\app.php 作为别名。

门面类参考

Laravel 自带许多门面。下表显示了内置的门面类参考:

门面 服务容器绑定
App Illuminate\Foundation\Application app
Artisan Illuminate\Contracts\Console\Kernel artisan
Auth Illuminate\Auth\AuthManager auth
Auth (实例) 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 (实例) 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 (实例) Illuminate\Queue\QueueInterface
Queue (基类) 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 (实例) Illuminate\Session\Store
Storage Illuminate\Contracts\Filesystem\Factory filesystem
URL Illuminate\Routing\UrlGenerator url
Validator Illuminate\Validation\Factory validator
Validator (实例) Illuminate\Validation\Validator
View Illuminate\View\Factory view
View (实例) Illuminate\View\View

示例

步骤 1 - 通过执行以下命令创建名为TestFacadesServiceProvider的服务提供者。

php artisan make:provider TestFacadesServiceProvider

步骤 2 - 成功执行后,您将收到以下输出:

FacadesServiceProvider

步骤 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”的门面类。

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的门面类。

App/Providers/TestFacadesServiceProviders.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

Service Provider

步骤 7 - 在config/app.php文件中添加别名,如下图所示。

config/app.php

Alias

步骤 8 - 在app/Http/routes.php文件中添加以下代码。

app/Http/routes.php

Route::get('/facadeex', function() {
   return TestFacades::testingFacades();
});

步骤 9 - 访问以下 URL 来测试门面。

https://127.0.0.1:8000/facadeex

步骤 10 - 访问 URL 后,您将收到以下输出:

Testing Facades
广告