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 is_dir() 判断给定文件名是否是一个目录
May 10 PHP
php-cli简介(不会Shell语言一样用Shell)
Jun 03 PHP
yii操作session实例简介
Jul 31 PHP
PHP-X系列教程之内置函数的使用示例
Oct 16 PHP
PHP实现分布式memcache设置web集群session同步的方法
Apr 10 PHP
在Laravel中使用DataTables插件的方法
May 29 PHP
PHP实现普通hash分布式算法简单示例
Aug 06 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
Laravel timestamps 设置为unix时间戳的方法
Oct 11 PHP
php实现微信和支付宝支付的示例代码
Aug 11 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 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实现的ping端口函数实例
2014/11/12 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
python多线程扫描端口示例
2014/01/16 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
Python sublime安装及配置过程详解
2020/06/29 Python
利用css3如何设置没有上下边的列表间隔线
2017/07/03 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
床上用品全球在线购物:BeddingInn
2016/12/18 全球购物
Europcar葡萄牙:葡萄牙汽车和货车租赁
2017/10/13 全球购物
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
现金出纳岗位职责
2014/03/15 职场文书
2016猴年春节问候语
2015/11/11 职场文书