>백엔드 개발 >PHP 튜토리얼 >[ Laravel 5.2 文档 ] 架构 -- 门面(Facades)

[ Laravel 5.2 文档 ] 架构 -- 门面(Facades)

WBOY
WBOY원래의
2016-06-20 12:40:56966검색

1、简介

门面为应用的服务容器中的绑定类提供了一个“静态”接口。Laravel内置了很多门面,你可能在不知道的情况下正在使用它们。Laravel 的门面作为服务容器中的底层类的“静态代理”,相比于传统静态方法,在维护时能够提供更加易于测试、更加灵活的、简明且富有表现力的语法。

2、使用门面

在 Laravel 应用的上下文中,门面就是一个提供访问容器中对象的类。该机制原理由 Facade类实现,Laravel 自带的门面,以及创建的自定义门面,都会继承自 Illuminate\Support\Facades\Facade基类。

门面类只需要实现一个方法: getFacadeAccessor。正是 getFacadeAccessor方法定义了从容器中解析什么,然后 Facade基类使用魔术方法 __callStatic()从你的门面中调用解析对象。

下面的例子中,我们将会调用 Laravel 的缓存系统,浏览代码后,也许你会觉得我们调用了 Cache的静态方法 get:

<?phpnamespace 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门面。该门面作为代理访问底层 Illuminate\Contracts\Cache\Factory接口的实现。我们对门面的所有调用都会被传递给 Laravel 缓存服务的底层实例。

如果我们查看 Illuminate\Support\Facades\Cache类的源码,将会发现其中并没有静态方法 get:

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

Cache门面继承 Facade基类并定义了 getFacadeAccessor方法,该方法的工作就是返回服务容器绑定类的别名,当用户引用 Cache类的任何静态方法时,Laravel 从服务容器中解析 cache绑定,然后在解析出的对象上调用所有请求方法(本例中是 get)。

3、门面类列表

下面列出了每个门面及其对应的底层类,这对深入给定根门面的 API文档而言是个很有用的工具。服务容器绑定键也被包含进来:

门面 服务容器绑定别名
App Illuminate\Foundation\Application app
Artisan Illuminate\Console\Application 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
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
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.