Skip to content

Facades

介绍

Facades 提供了一个“静态”接口来访问应用程序服务容器中可用的类。Laravel 附带了许多 facades,你可能在不知不觉中已经在使用它们了!Laravel 的“facades”作为服务容器中底层类的“静态代理”,提供了简洁、富有表现力的语法,同时比传统的静态方法具有更好的可测试性和灵活性。

使用 Facades

在 Laravel 应用程序的上下文中,facade 是一个提供从容器访问对象的类。使这项工作成为可能的机制在 Facade 类中。Laravel 的 facades 以及你创建的任何自定义 facades 都将扩展基础的 Illuminate\Support\Facades\Facade 类。

一个 facade 类只需要实现一个方法:getFacadeAccessorgetFacadeAccessor 方法的任务是定义从容器中解析什么。Facade 基类利用 __callStatic() 魔术方法将从你的 facade 发出的调用推迟到解析的对象。

在下面的示例中,调用了 Laravel 缓存系统。通过浏览此代码,可能会认为静态方法 get 是在 Cache 类上调用的:

php
<?php

namespace App\Http\Controllers;

use Cache;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * 显示给定用户的个人资料。
     *
     * @param  int  $id
     * @return Response
     */
    public function showProfile($id)
    {
        $user = Cache::get('user:'.$id);

        return view('profile', ['user' => $user]);
    }
}

注意在文件的顶部我们“导入”了 Cache facade。这个 facade 作为访问 Illuminate\Contracts\Cache\Factory 接口底层实现的代理。我们使用 facade 进行的任何调用都将传递给 Laravel 缓存服务的底层实例。

如果我们查看 Illuminate\Support\Facades\Cache 类,你会发现没有静态方法 get

php
class Cache extends Facade
{
    /**
     * 获取组件的注册名称。
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'cache'; }
}

相反,Cache facade 扩展了基础 Facade 类并定义了方法 getFacadeAccessor()。记住,这个方法的任务是返回服务容器绑定的名称。当用户引用 Cache facade 上的任何静态方法时,Laravel 从服务容器中解析 cache 绑定,并在该对象上运行请求的方法(在本例中为 get)。

Facade 类参考

下面你会找到每个 facade 及其底层类。这是一个快速深入了解给定 facade 根的 API 文档的有用工具。还包括了服务容器绑定键(如适用)。

Facade服务容器绑定
AppIlluminate\Foundation\Applicationapp
ArtisanIlluminate\Contracts\Console\Kernelartisan
AuthIlluminate\Auth\AuthManagerauth
Auth (实例)Illuminate\Auth\Guard
BladeIlluminate\View\Compilers\BladeCompilerblade.compiler
BusIlluminate\Contracts\Bus\Dispatcher
CacheIlluminate\Cache\Repositorycache
ConfigIlluminate\Config\Repositoryconfig
CookieIlluminate\Cookie\CookieJarcookie
CryptIlluminate\Encryption\Encrypterencrypter
DBIlluminate\Database\DatabaseManagerdb
DB (实例)Illuminate\Database\Connection
EventIlluminate\Events\Dispatcherevents
FileIlluminate\Filesystem\Filesystemfiles
GateIlluminate\Contracts\Auth\Access\Gate
HashIlluminate\Contracts\Hashing\Hasherhash
InputIlluminate\Http\Requestrequest
LangIlluminate\Translation\Translatortranslator
LogIlluminate\Log\Writerlog
MailIlluminate\Mail\Mailermailer
PasswordIlluminate\Auth\Passwords\PasswordBrokerauth.password
QueueIlluminate\Queue\QueueManagerqueue
Queue (实例)Illuminate\Queue\QueueInterface
Queue (基类)Illuminate\Queue\Queue
RedirectIlluminate\Routing\Redirectorredirect
RedisIlluminate\Redis\Databaseredis
RequestIlluminate\Http\Requestrequest
ResponseIlluminate\Contracts\Routing\ResponseFactory
RouteIlluminate\Routing\Routerrouter
SchemaIlluminate\Database\Schema\Blueprint
SessionIlluminate\Session\SessionManagersession
Session (实例)Illuminate\Session\Store
StorageIlluminate\Contracts\Filesystem\Factoryfilesystem
URLIlluminate\Routing\UrlGeneratorurl
ValidatorIlluminate\Validation\Factoryvalidator
Validator (实例)Illuminate\Validation\Validator
ViewIlluminate\View\Factoryview
View (实例)Illuminate\View\View