跨模块调用

在ThinkPHP中,使用 $this 可以调用当前模块内的方法,但是很多情况下经常会在当前模块中调用其他模块的方法。

通过大A 方法跨模块调用Controller A 方法用于实例化其他模块(相当于 new 关键字),模块被实例化之后,就可以以对象的方式调用模块内的操作。例如,我在Home分组下的Index模块下有个index()操作,在User模块下有个test()操作,现在我要在Home>Index>index()操作里调用Home>User>test()操作。

//User模块下的test操作
class UserController extends Controller{
     public function test(){
         return "这是User模块下的test方法";
     }
}
//Index模块下的index操作
class IndexController extends Controller{
     public function index(){
         //用一般的方法
         //$User = new UserController();
         //$ret = $User -> test();
         //用大A方法
         $User = A('User');
         $ret = $User->test();
         dump($ret);//返回'这是User模块下的test方法'
     }
}

A 方法还支持跨分组调用方法和跨项目调用方法,语法如下: A(‘<项目名://><分组名/>模块名’)

// 常用例子如下

A('User') //调用当前项目的 User 模块,如上面的例子

A('Admin://User') //调用 Admin 项目的 User 模块
A('Admin/User') //调用 Admin 分组的 User 模块

A('Admin://Tool/User') //调用 Admin 项目 Tool 分组的 User 模块

例如,我在Home分组下的Index模块下有个index()操作,在Admin分组下User模块下有个test()操作,现在我要在Home>Index>index()操作里调用Admin>User>test()操作。

//User模块下的test操作
class UserController extends Controller{
     public function test(){
         return "这是User模块下的test方法";
     }
}
//Index模块下的index操作
class IndexController extends Controller{
     public function index(){
         //用大A方法
         $User = A('Admin/User');
         $ret = $User->test();
         dump($ret);//返回'这是User模块下的test方法'
     }
}

公共控制器继承

在Common目录里创建Controller目录且建立CommonController.class.php文件,那如何在Home目录里的IndexController.class.php里调用呢?

<?php

namespace Home\Controller;

use Common\Controller\CommonController;

class IndexController extends CommonController{

public function index(){

echo '8888888';

return;

}

}

跨模块调用Model

$article = D('Admin/Article');

//或者 $article = new Admin\Model\ArticleModel()

两个模块之间公用同一个Model

比如Home模块需要调用Admin模块里面存在的关联模型。怎么调用: 后台模块Admin Admin --Model -- --ArticleModel.class.php(关联模型) 前台模块Home 也需要使用Admin关联模型。怎么弄?

回答:把模型直接放到公共模块下面的model这个文件夹下面 然后使用model这个函数实例化对应的模型 或直接 new \app\common\model\XXXXX();

本文分享自微信公众号 - Tech爬虫(php_pachong),作者:爬虫

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ThinkPHP-难得的中文框架

    2.模块下包括基本类型 //模块化设计思维,模块是包含mvc函数配置的集合。 函数-- common文件夹

    公众号php_pachong
  • URL操作

    一.URL 大小写 系统默认的规范是根据 URL 里面的模块名、控制器名来定位到具体的控制器类。比如: http://localhost/demo39/inde...

    公众号php_pachong
  • 表达式查询

    如果进行多字段查询,那么字段之间的默认逻辑关系是 逻辑与 AND,但是用下面的规则可以更改默认的逻辑判断,通过使用 _logic 定义查询逻辑:

    公众号php_pachong
  • 《从零开始学ASP.NET CORE MVC》:为您的机器配置开发环境(二)

    我的是Windows操作系统,因此,我将使用Visual Studio作为.NET Core应用程序开发的编辑器。 当然您可以使用您选择的任何编辑器,不过我推荐...

    角落的白板报
  • OpenShift 3.11 离线安装

    泽阳
  • cf1043D. Mysterious Crime(枚举)

    枚举第一个串的位置,直接维护10个指针,分别表示每个串与第一个串匹配到的位置,同时记录出已经匹配了多少位

    attack
  • 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 模块插件集成

          前面我们在AgileEAS.NET之插件接口IModule和AgileEAS.NET之插件运行容器中对模块插件和运行容器都做了介绍,本文我们介绍Ag...

    魏琼东
  • YouTube 遭黑客破坏并清除大量流行音乐视频

    YouTube 上正在发生一些可疑的事情。看起来谷歌的子公司遭到了黑客的袭击,因为一些流行的音乐视频已经遭到了破坏或者突然消失了。事实上,该平台上观看次数最多的...

    周俊辉
  • 数据科学家不能错过的顶级 Github 代码仓库 &amp; Reddit 讨论串(六月榜单盘点)

    2018 年已经过半,是时候来发布六月版的 GitHub 项目库和 Reddit 版块 TOP 榜单。在撰写本文的过程中,我已经学习了不少机器学习的知识,有从开...

    AI研习社
  • 动手抓取搜狗搜索引擎壁纸API接口

    墨渊

扫码关注云+社区

领取腾讯云代金券