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 相关文章推荐
一个MYSQL操作类
Nov 16 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
PHP中对于浮点型的数据需要用不同的方法解决
Mar 11 PHP
php自定义函数截取汉字长度
May 15 PHP
php数组索引的Key加引号和不加引号的区别
Aug 19 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
php-msf源码详解
Dec 25 PHP
php实现数字补零的方法总结
Sep 12 PHP
Laravel框架搜索分页功能示例
Feb 01 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
Apr 10 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
基于PHP技术开发客服工单系统
2016/01/06 PHP
PHP 获取指定地区的天气实例代码
2017/02/08 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
VueJS全面解析
2016/11/10 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
小程序分享链接onShareAppMessage的具体用法
2020/05/22 Javascript
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
Python中的localtime()方法使用详解
2015/05/22 Python
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
python实现PCA降维的示例详解
2020/02/24 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
python 深度学习中的4种激活函数
2020/09/18 Python
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
农场厂长岗位职责
2013/12/28 职场文书
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL