ThinkPHP 跨模块调用与找不到方法问题

在做php开发的时候,有时候我在一个模块里面写了一个方法,但是我要在另外的一个模块内调用,此时就需要跨模块调用了,比如现在我有一个usersAction这个模块 内有一个test()方法 我在company内要调用 此时如何进行呢?有2种办法

 代码如下 复制代码

一:$User = A("User"); // 实例化UserAction控制器对象

$User->importUser(); // 调用User模块的importUser操作方法

这里的A("User") 是一个快捷方法,和下面的代码等效:

 代码如下 复制代码

import("@.Action.UserAction");

$User = new UserAction();

事实上,在这个例子里面还有比A方法更简单的调用方法,例如:

 代码如下 复制代码
R("User","importUser");

 // 远程调用UserAction控制器的importUser操作方法

上面只是在当前项目中调用,如果你有需要在多个项目之间调用方法,一样可以完成:

 代码如下 复制代码

$User = A("User","App2"); // 实例化App2项目的UserAction控制器对象

$User->importUser();

// 远程调用App2项目的UserAction控制器的importUser操作方法

 代码如下 复制代码

R("User","importUser","App2");

我的一个例子:

一个项目下面分了两个组:admin和home

home默认是组:

实例化模块的时候(当前位置是在admin中IndexAction类的index方法中实例化)

 代码如下 复制代码

import("@.Action.Home.UserAction");

$User=new UserAction();

$User->show();

$User->add();

注:调用的方法必须是 public型的

另外还有一种简单的办法就是 把test方法写到common.php内即可 因为这个文件在加载的时候已经默认的调用了

找不到方法的解决

不知道这个算不算BUG,如果被调用的Action和当前Action同名,ThinkPHP就会报找不到方法(也许是在调用的这个Action里找了).
比如:Admin/Config里调Common/Config里的方法时,就会出现这个问题,解决方法:
没办法,改个名字吧。

时间: 2024-09-26 15:19:45

ThinkPHP 跨模块调用与找不到方法问题的相关文章

Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问这个类不存在的方法,那么它会去访问"魔术方法__call()" 用户访问一个不存在的操作->解决:给每个控制器都定义个_empty()方法来处理   第二个解决方法:定义一个空操作 [空模块处理] 我们使用一个类,但是现在这个类还没有被include进来. 我们可以通过自动加载机制处

ThinkPHP跨控制器调用方法

跨控制器调用方法 1. 先造对象,再调用里面的方法 $sc=new \Home\Controller\IndexController();  用绝对路径找echo $sc->ShuChu(); 2. $sc=new IndexController();  用相对路径 echo $sc->ShuChu(); 还可以使用thingkphp中的快捷方法 1. $sc=A("Index");      使用TP框架的快捷方法A来创建控制器对象  ()内直接写控制器名 [跨模块调用]

destoon文章模块调用企业会员资料的方法_php实例

本文实例展示了destoon文章模块调用企业会员资料的方法,对于destoon开发来说非常具有实用价值. 一般来说,为吸引企业会员发布企业文章,当企业会员发布文章后文章底部自动调出该企业会员的企业信息,这样企业会员就比较喜欢发布一些文章.这一功能的具体实现方法如下: 主要代码如下: {if $username} {php $user_status=3;} {php $member = userinfo($username);} {template 'contact', 'chip'} {/if}

cs文件-asp.net怎么跨文件调用另一个类的方法,求大神

问题描述 asp.net怎么跨文件调用另一个类的方法,求大神 例如: cs文件A class a { public a(){} public string stra(){} } cs文件B class b { public b(){} public string strb(){} } 现在我要在cs文件A里调用cs文件B的strb()方法,怎么写,求大神教,最好有个代码解释,谢谢! 解决方案 class a { public a(){} public string stra(){} public

STL 跨模块 调用 异常 解决

百度了一天,现在把结论放上边: 1.不要用STL(std::string属于STL)来跨模块传输数据,例如:dll(so)之间,dll(so)和exe(elf)之间. 解决方法:使用基本类型.数组.结构体,或者使用下面文章中的方法. 2.不要跨模块申请和释放内存. 解决方法:可以实现一个接口来释放,其他方法参考下面. 今天用个测试exe调用了个dll,有个接口返回std::string,经调试发现挂在该函数return之后,怀疑是string不适合作为返回值,百度一番发现下面这篇解释的很详细.

Eclipse 中java跨工程调用类

在Eclipse中,有时候需要跨工程调用其他工程中的方法.如下面有两个Java Project : 如果要在A工程中调用B工程中的类,可以将B工程添加到A工程中: A---- >Build Path---- >Configure Build Path---- >Java Build Path 选择Projects  这样在项目A中的类就可以直接import B项目中的类啦.

thinkphp跨库操作的简单代码实例_php实例

实例一:配置config.php文件配置多个数据库配置 'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp', 控制器中调用方法: $New = M('表名','前缀没前缀不填写','DB_CONFIG2'); 这里相当于从新连接了数据库远程跨库如果是在同一个服务器数据库可以直接切换: $User = M('数据库名.表名','前缀没有可不填'); 实例二:Model模型中的跨库以下代码填写到模型类中 protected $con

thinkPHP 空模块和空操作、前置操作和后置操作 详细介绍(十四)

原文:thinkPHP 空模块和空操作.前置操作和后置操作 详细介绍(十四) 本章节:介绍 TP 空模块和空操作.前置操作和后置操作 详细介绍 一.空模块和空操作1.空操作function _empty($name){$this->show("$name 不存在 <a href='__APP__/Index/index'>返回首页</a>");}2.空模块(EmptyAction.class.php的文件)class EmptyAction extends

thinkPHP简单调用函数与类库的方法

本文实例讲述了thinkPHP调用函数与类库的方法.分享给大家供大家参考,具体如下: 手册上说的很冗余,没看懂,下面简单的讲一下具体用法. 函数调用: lib公共函数库叫 common.php App/common/common.php 分组模块下的公共函数库叫 function.php App/Modules/Admin/common/function.php 类库调用: class IndexAction extends Action{ public function index(){ //