TP框架中跨控制器调用操作方法

最近在改一些老的项目,在优化代码中需要跨控制器调用一些方法,以前都是实例化类然后调用,现在才发现有更好的更简单的方法,因此记录下来。

我要介绍的就是下面的A函数:
Thinkphp中的A 函数(Thinkphp3.2.3版本)
A函数是TP中实例化控制器的一个快捷函数,它的语法结构如下:

A(‘模块/控制器’)
//当控制器层名称不是 Controller 时须这样写
A(‘模块/控制器’,‘控制器层名称’)

如果要调用的控制器就在当前模块下,那么也可以按如下语法写:

A(‘控制器’)
//或者这样
A(‘控制器’,‘控制器层名称’)

通常情况下访问控制器的实例化是自动完成的,系统会根据URL地址解析出访问的控制器名称自动实例化,并且调用相关的操作方法。比如我们输入下列URL地址:

http://serverName/Home/Index/index
此时系统会自动实例化 Home/Controller/IndexController.class.php 中的 IndexController 类。但如果你需要跨控制器调用的话必须先实例化才能调用:

//假设当前在Home模块的Index控制器下
// 实例化Home模块的User控制器
$User = new \Home\Controller\UserController();
// 实例化Admin模块的Blog控制器
$Blog = new \Admin\Controller\BlogController();
以上代码如果用 A 函数的话可以简化如下:

$User = A(‘User’);
//因为 User 控制器就在当前模块 Home 下,所以模块名称可以省略
$Blog = A(‘Admin/Blog’);
默认情况下,A方法实例化的是默认控制器层(Controller),如果你要实例化其他的分层控制器的话(比如 Event),可以使用:

// 假设当前模块是Home模块
// 实例化Event控制器
$User = A(‘User’,‘Event’);
$Blog = A(‘Admin/Blog’,‘Event’);

上面的代码等效于:

// 实例化Home模块的User事件控制器
KaTeX parse error: Undefined control sequence: \Home at position 12: User = new \̲H̲o̲m̲e̲\Event\UserEven…Blog = new \Admin\Event\BlogEvent();

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__0809 返回首页