thinkphp A()、R()方法不能跨项目调用与当前action名称相同的控制器的原因

thinkphp 使用A()和R()方法跨项目调用时,不能调用另一个项目中与当前所在action类名称相同的action类。

以下是common.PHP,import()方法308-312行

[php] view plain copy

  1. $classfile = $baseUrl . $class . $ext;
  2. if (!class_exists(basename($class),false)) {
  3. // 如果类不存在 则导入类库文件
  4. return require_cache($classfile);
  5. }

在这里的第2行中,使用了class_exists()方法判断所需要加载的类是否存在,如果不存在,就导入类库文件,也就是导入另一个项目的action类文件。

class_exists()的第2个参数为false,则不会__autoload(),也就是只会在当前文件中查找类是否存在,一般来说都是找不到的,所以可以顺利进入下一句。

但是,如果调用另一个项目中与当前所在action类名称相同的action类,则此句会认为你所要的action类已经存在,即当前操作的action,因为类名相同。然后系统返回的就是当前action类

时间: 2024-10-31 13:23:03

thinkphp A()、R()方法不能跨项目调用与当前action名称相同的控制器的原因的相关文章

谷歌、火狐浏览器下实现JS跨域iframe高度自适应的完美解决方法,跨域调用JS不再是难题!

谷歌.火狐浏览器下实现JS跨域iframe高度自适应的解决方法 导读:今天开发的时候遇到个iframe自适应高度的问题,相信大家对这个不陌生,但是一般我们都是在同一个项目使用iframe嵌套页面,这个ifame高度自适应网上一搜一大把,今天要讲的如何在不同的网站下进行相互的调用跟在同一个网站下是一个效果:例如我在自己的项目里面Iframe  了第一博客的页面  http://www.diyibk.com/   当第一博客的页面高度变化了怎么通知父页面呢? 这个时候在谷歌下肯定是拿不到 ifram

ThinkPHP 跨模块调用操作方法(A方法与R方法)

ThinkPHP 跨模块调用操作方法(A方法与R方法) 跨模块调用操作方法 前面说了可以使用 $this 来调用当前模块内的方法,但实际情况中还经常会在当前模块调用其他模块的方法.ThinkPHP 内置了 A方法与 R 方法这两个特殊的大写字母方法来处理跨模块调用的问题. 目前 Index 模块内有 index 操作,User 模块有 showName 操作,User 模块及 showName 操作具体代码如下: <?php class UserAction extends Action{ pu

ThinkPHP函数详解:R方法

R方法用于调用某个控制器的操作方法,是A方法的进一步增强和补充.关于A方法的用法见这里.R方法的调用格式:R('[项目://][分组/]模块/操作','参数','控制器层名称') 例如,我们定义了一个操作方法为: class UserAction extends Action { public function detail($id){ return M('User')->find($id); } } 复制代码 那么就可以通过R方法在其他控制器里面调用这个操作方法(一般R方法用于跨模块调用) $

ThinkPHP实现跨模块调用操作方法概述

ThinkPHP实现跨模块调用操作方法概述 投稿:shichen2014 字体:[增加 减小] 类型:转载 使用 $this 可以调用当前模块内的方法,但是很多情况下经常会在当前模块中调用其他模块的方法.这篇文章主要介绍了ThinkPHP跨模块调用操作,需要的朋友可以参考下 使用 $this 可以调用当前模块内的方法,但是很多情况下经常会在当前模块中调用其他模块的方法.ThinkPHP内置了A方法与R方法这两个特殊的大写字母方法来处理跨模块调用的问题. 目前Index模块内有index操作Use

Thinkphp常用的方法和技巧(转)

2012年09月26日 Thinkphp 里一些常用方法和技巧的整理,包括常用的快捷键以及在程序开发时用到的一些实用方法,关于快捷键用得不是很熟练,总之,掌握这些方法和技巧,对于我们开发 thinkphp 网站有很大的一个帮助,尤其对于懒人来说,在编写程序时最怕的就是重写源码,而对于这些实用的源码我们可以直接粘来,非常实用. 这是使用Thinkphp快捷键 A:快速实例化Action类库 B:执行行为类 C:配置参数存取方法 D:快速实例化Model类库 F:快速简单文本数据存取方法 L:语言参

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

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

ThinkPHP的A方法,R方法,M方法,D方法区别

在Thinkphp中,实例化对象有这么几种方法,如果是类,有A和R方法,区别是A方法只是对象的实例化,而R方法是可以同时实例化对象里面的方法的,这里需要去指定,如下面的实例代码: 1 <?php 2 namespace Admin\Controller; 3 use Think\Controller; 4 5 class GoodsController extends Controller{ 6 public function showlist(){ 7 8 //实例化控制器A方法 9 $tes

自己的项目结合MVC实现ajax跨域调用

好久没写东西了,自我检讨一下,写不完这篇不下班!! 最近在做一个项目模块通用的分享功能插件,由于各个模块调用所以会出现跨域问题,正好之前同事解决过,于是自己亲身实践把这次解决问题的经历记录下来.闲言少叙,书归正传~ 首先,项目背景,一个基于jquery的分享插件开发,自己也是尝试着写这么个东西,第一次写,质量肯定差,下次博文把这次开发经历写出来.由于这次解决ajax跨域的方法很简单,我就粘贴代码简单说明一下. 第一步:编写后台程序,MVC下代码如下:      //这是一个获取某个用户的通讯录分

实现jquery.ajax及原生的XMLHttpRequest跨域调用WCF服务的方法

关于ajax跨域调用WCF服务的方法很多,经过我反复的代码测试,认为如下方法是最为简便的,当然也不能说别人的方法是错误的,下面就来上代码,WCF服务定义还是延用上次的,如: namespace WcfService1 { [ServiceContract] public interface IAddService { [OperationContract] [WebInvoke(Method="GET",RequestFormat=WebMessageFormat.Json, Resp