ThinkPHP之R方法实例详解


Posted in PHP onJune 20, 2014

ThinkPHP的R方法用于调用某个控制器的操作方法,是A方法的进一步增强和补充。

R方法的调用格式:

R('[项目://][分组/]模块/操作','参数','控制器层名称')

例如,我们定义了一个操作方法为:

class UserAction extends Action {
  public function detail($id){
    return M('User')->find($id);
  }
 }

那么就可以通过R方法在其他控制器里面调用这个操作方法(一般R方法用于跨模块调用)

$data = R('User/detail',array('5'));

表示调用User控制器的detail方法(detail方法必须是public类型),返回值就是查询id为5的一个用户数据。如果你要调用的操作方法是没有任何参数的话,第二个参数则可以留空,直接使用:

$data = R('User/detail');

也可以支持跨分组和项目调用,例如:

R('Admin/User/detail',array('5'));

表示调用Admin分组下面的User控制器的detail方法。

R('Admin://User/detail',array('5'));

表示调用Admin项目下面的User控制器的detail方法。

官方的建议是不要在同一层做太多调用,否则会引起逻辑的混乱,被公共调用的部分应该封装成单独的接口,可以借助ThinkPHP3.1的新特性多层控制器,单独添加一个控制器层用于接口调用,例如,我们增加一个Api控制器层,

class UserApi extends Action {
  public function detail($id){
    return M('User')->find($id);
  }
 }

然后,使用R方法调用

$data = R('User/detail',array('5'),'Api');

也就是说,R方法的第三个参数支持指定调用的控制器层。
同时,R方法调用操作方法的时候可以支持操作后缀设置C('ACTION_SUFFIX'),如果你设置了操作方法后缀,仍然不需要更改R方法的调用方式。

PHP 相关文章推荐
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 PHP
PHP字符转义相关函数小结(php下的转义字符串)
Apr 12 PHP
PHP学习 运算符与运算符优先级
Jun 15 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
php函数连续调用实例分析
Jul 30 PHP
php常用图片处理类
Mar 16 PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP+Ajax实现的博客文章添加类别功能示例
Mar 29 PHP
php使用curl伪造来源ip和refer的方法示例
May 08 PHP
ThinkPHP之import方法实例详解
Jun 20 #PHP
ThinkPHP之A方法实例讲解
Jun 20 #PHP
ThinkPHP之M方法实例详解
Jun 20 #PHP
php实现的短网址算法分享
Jun 20 #PHP
ThinkPHP3.1之D方法实例详解
Jun 20 #PHP
php写的AES加密解密类分享
Jun 20 #PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 #PHP
You might like
第十一节 重载 [11]
2006/10/09 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
自动完成的搜索框javascript实现
2016/02/26 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
在Django中使用Sitemap的方法讲解
2015/07/22 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
python使用 zip 同时迭代多个序列示例
2019/07/06 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
护士医德医风自我评价
2014/09/15 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
节约用电倡议书
2015/04/28 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
小学运动会入场词
2015/07/18 职场文书
Django显示可视化图表的实践
2021/05/10 Python
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏