【Laravel5.2翻译】门面


前阵子看了点Laravel源码,越看越乱,网上大部分中文文档都是直译,比较生涩难懂,还是决定看英文文档顺便就我的理解做下翻译整理记录下来

思维导图

简介

门面为应用服务器内可用的类提供了“静态”接口。Laravel装载了许多门面,你可能都没意识到自己正在使用它们!Laravel的门面为服务容器中的基础类提供了”静态代理”,提供了简洁形象的语法,让我们维护起来比传统静态方法更灵活可测。

使用面门

在Laravel的上下文中,facade就是一个类,它提供了容器中对象的访问入口。让它工作的核心就是Facade类。Laravel的门面和任何自定义的门面都要继承Illuminate\Support\Facades\Facade类。

facade类只需要实现一个方法:getFacadeAccessorgetFacdeAccessor方法的职责就是定义从容器中解析什么。门面的基类使用__callStatic()魔术方法来延时从facade中调用被解析的对象。
在下面的例子中,调用了Laravel缓存系统。初看之下,你可能会觉得Cache类的静态方法get被调用了

<?php

namespace App\Http\Controllers;

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

class UserController extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return Response
     */
    public function showProfile($id)
    {
        $user = Cache::get('user:'.$id);

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

注意我们在文件头上导入的Cache门面,这个门面作为一个代理来访问Illuminate\Contracts\Factory接口的基础实现。任何时候我们调用门面都将会传递给Laravel缓存服务的基础实现。
如果我们看下Illuminate\Support\Facades\Cache类,你将看到里面没有静态方法get:

class Cache extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'cache'; }
}

取而代之的,Cache门面继承了Facade类然后定义了getFacadeAccessor。记住,这个方法的职责是返回服务容器绑定名。当用到Cache门面的任何静态方法,Laravel会从服务容器中解析cache绑定然后运行请求的对象方法(这里是get)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍 Facades 为应用的 IoC 服务容器 的类提供了一个静态的接口。Laravel 里面自带了一些 Fac...
    伊Summer阅读 11,105评论 0 11
  • 过去做事情急,什么东西拿起来就用,不喜欢进行系统性的学习,造成在使用过程中的错误和低效,现在感觉自己耐心多了,用之...
    马文Marvin阅读 2,027评论 0 10
  • 先说几句废话,调和气氛。事情的起由来自客户需求频繁变更,伟大的师傅决定横刀立马的改革使用新的框架(created ...
    wsdadan阅读 3,091评论 0 12
  • Laravel 的核心概念包括:服务容器、服务提供者、门面(Facades)、契约(Contracts)。 服务容...
    胖福哥阅读 2,807评论 0 24
  • Facade 布局是在面向对象编程中经常使用的一种软件设计布局方式。Facade 实际上是一种包括复杂函数库的类,...
    OneAPM阅读 1,495评论 0 15