跨模块调用

2021-09-27 11:00:09
admin
1399
最后编辑:admin 于 2022-08-08 15:34:54

在开发过程中经常会在当前模块调用其他模块的方法,这个时候就涉及到跨模块调用。在 zentaoPHP 框架中,一个模块的 control 或者 model 都可以直接调用另外一个模块的 model。

zentaoPHP 框架中内置了一个 loadModel() 方法,参数是目标模块名,用来在一个模块中加载另一个模块的业务逻辑 model 对象。即如果存在目标 model.php 文件,则该方法返回其对象,若没有目标文件则返回 false。

模块的 control 和 model 对象都可以调用该方法,加载后,使用 $this->模块名 来访问该 model 对象。

例如:

我想在 index 模块 ceshi 方法中调用 article 模块 model 中的 getList() 方法,代码如下:

    public function ceshi()
    {    
        $data = $this->loadModel('article');
        $this->view->articles = $data->getList();   //也可以写成 $this->article->getList()
        $this->display();
    }

:框架中定义了一个 $loadedModels 变量(二维数组),用来记录/存放已经加载过的应用模块(model 对象)。所以,在调用 loadModel 方法时,会先从 $loadedModels 中查找是否调用过目标模块,如果有则直接从该变量中返回目标 model 对象,否则才走模块调用逻辑。