美文网首页
laravel中的Facades

laravel中的Facades

作者: dark68 | 来源:发表于2021-05-05 09:08 被阅读0次

1 什么是Facades

Facades 为应用的 服务容器 提供了一个「静态」 接口。Laravel 自带了很多 Facades,可以访问绝大部分功能。Laravel Facades 实际是服务容器中底层类的 「静态代理」 ,相对于传统静态方法,在使用时能够提供更加灵活、更加易于测试、更加优雅的语法。例如 路由的使用:

Route::路由方法();

如果不使用静态方式则需要创建 Illuminate\Routing\Router 类的实例来调用对应的路由方法:

$route = app()->make('router');

$route->get('instance', function(){
return 'instance 的 路由';
});

2 工作原理

在 Laravel 应用中,Facade 就是一个可以从容器访问对象的类。其中核心的部件就是 Facade 类。不管是 Laravel 自带的 Facades,还是自定义的 Facades,都继承自 Illuminate\Support\Facades\Facade 类。

Facade 基类使用了__callStatic() 魔术方法,直到对象从容器中被解析出来后,才会进行调用。

3 自定义 Facades

当我们自己提供了一个服务类,想要让该类也能实现静态调用,我们可以定义属于我们自己的 Facades。自定义 Facades 主要有以下几个步骤:

1.创建服务类;
2.创建并编写代理类:

实现了上述步骤之后就可以通过 静态方式调用。当然我们还可以结合于服务提供者来实现。

创建工具类

<?php


namespace App\Utils;


class SayHello
{
    public function say()
    {
        return '你好';
    }
}

自定义门面

<?php

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class SayHello extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        # 找到真正的类
//        return \App\Utils\SayHello::class;
       //或者在服务提供者中注册
        return 'sh';
    }
}

调用

# 门面
/*
创建自己的服务类
给服务类创建门面类:
    1.继承 Illuminate\Support\Facades\Facade 类;
    2.返回 能找到真实了的 内容; - 也可以注入到容器中,返回标识
 */
Route::any('fac', function(){
    dump(\App\Facades\SayHello::say());
});

相关文章

网友评论

      本文标题:laravel中的Facades

      本文链接:https://www.haomeiwen.com/subject/pkyxdltx.html