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 相关文章推荐
生成卡号php代码
Apr 09 PHP
小文件php+SQLite存储方案
Sep 04 PHP
Yii框架获取当前controlle和action对应id的方法
Dec 03 PHP
php递归删除目录与文件的方法
Jan 30 PHP
PHP中substr函数字符串截取用法分析
Jan 07 PHP
PHP getallheaders无法获取自定义头(headers)的问题
Mar 23 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
php app支付宝回调(异步通知)详解
Jul 25 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
PHP实现文件上传与下载
Aug 28 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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
PHP可变函数的使用详解
2013/06/14 PHP
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
python实现决策树分类
2018/08/30 Python
python实现批量视频分帧、保存视频帧
2019/05/31 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
Python中包的用法及安装
2020/02/11 Python
python如何操作mysql
2020/08/17 Python
python中pyplot基础图标函数整理
2020/11/10 Python
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
在职人员函授期间自我评价分享
2013/11/08 职场文书
浪费资源的建议书
2014/03/12 职场文书
颁奖典礼主持词
2014/03/25 职场文书
煤矿安全承诺书
2014/05/22 职场文书
街道社区活动报告
2015/02/05 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书
建房合同协议书
2016/03/21 职场文书