ThinkPHP实现自定义门面类(Facade)动态加载

首先翻看手册上的例子

getFacedeClass方法用来指定Facade类映射的实际执行类,那是否可以动态指定自定义门面类呢?答案是可以的。

实现思路是创建一个trait类用于Facade类的继承,然后在该类中完善getFacadeClass方法,指定动态的类映射,代码如下:

然后在自定义的Facade类中use FacadeDefind;即可,不过需保证Facade类跟实际执行类的名称要相同(不同亦可,但为了方便定义跟调用最好还是相同比较好)。

同时Facade类的底层是使用容器去进行加载的,这里设置了映射之后,因为容器已经找不到定义的实际执行类了,所以需要在自定义容器绑定配置中定义好容器映射,找到app目录中的provider.php,然后每增加一个Facade类就新加一条容器映射定义,比如:

 Request::class,
    'think\exception\Handle' => ExceptionHandle::class,
    // 自定义容器映射
    'DingHandle'             => DingHandle::class,
];

然后就可以使用了。

你可能感兴趣的:(thinkphp,php)