跳到主要内容
版本:5.2

Facades

简介​

译者注:Facade 中文意为 - 门面,外观,包装器。专有名词的属性多一点,故不采用直译,而是直接做专有名词使用。

Facades 为应用程序的 服务容器 中可用的类提供了一个「静态」接口。Laravel 本身附带许多的 facades,甚至你可能在不知情的状况下已经在使用他们!Laravel 「facades」作为在服务容器内基类的「静态代理」,拥有简洁、易表达的语法优点,同时维持着比传统静态方法更高的可测试性和灵活性。

使用 Facades​

在 Laravel 应用程序环境(Context)中,facade 是个提供从容器访问对象的类。Facade 类是这个机制运作的核心部件。Laravel 的 facades,以及任何你创建的自定义 facades,会继承基底 Illuminate\Support\Facades\Facade 类。

facade 类只需要去实现一个方法:getFacadeAccessor。getFacadeAccessor 方法的工作定义是从容器中解析出什么。Facade 基类利用 __callStatic() 魔术方法从你的 facade 延迟调用来解析对象。

在下面的例子,调用了 Laravel 的缓存系统。看了一下这个代码,或许有人认为静态方法 get 是被 Cache 类调用的:

<?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:

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 文档相当有用。可应用的 服务容器绑定 关键字也包含在里面。

FacadeClassService Container Binding
AppIlluminate\Foundation\Applicationapp
ArtisanIlluminate\Contracts\Console\Kernelartisan
AuthIlluminate\Auth\AuthManagerauth
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 (Instance)Illuminate\Database\Connection
EventIlluminate\Events\Dispatcherevents
FileIlluminate\Filesystem\Filesystemfiles
GateIlluminate\Contracts\Auth\Access\Gate
HashIlluminate\Contracts\Hashing\Hasherhash
LangIlluminate\Translation\Translatortranslator
LogIlluminate\Log\Writerlog
MailIlluminate\Mail\Mailermailer
PasswordIlluminate\Auth\Passwords\PasswordBrokerauth.password
QueueIlluminate\Queue\QueueManagerqueue
Queue (Instance)Illuminate\Contracts\Queue\Queuequeue
Queue (Base Class)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 (Instance)Illuminate\Session\Store
StorageIlluminate\Contracts\Filesystem\Factoryfilesystem
URLIlluminate\Routing\UrlGeneratorurl
ValidatorIlluminate\Validation\Factoryvalidator
Validator (Instance)Illuminate\Validation\Validator
ViewIlluminate\View\Factoryview
View (Instance)Illuminate\View\View

备注

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。

转载请注明:本文档由 Laravel China 社区 [laravel-china.org] 组织翻译。

文档永久地址: http://d.laravel-china.org