# ThinkPHP函数详解:R函数
[TOC]
R函数用于调用某个控制器的操作方法,是A函数的进一步增强和补充。关于[A函数](http://www.kancloud.cn/curder/php/123662)
R方法的调用格式
>[danger]
**R('[资源://][模块/]控制器/操作');**
例如,我们定义了一个操作方法【方法需要时Public权限】为:
~~~
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller {
// 列出某个用户的详细信息
public function detail($id){
return M('User')->find($id);
}
}
?>
~~~
文件路径为 **APP_PATH/Home/Controlel/UserController.class.php**
## 当前模块下的控制器调用detail方法
~~~
$detail = R('User/detail',array(1));
~~~
调用控制器的路径为 **APP_PATH/Home/Controlel/HomeController.class.php**
## 其他模块下的控制器调用detail方法
~~~
$detail = R('Home/User/detail',array(1));
~~~
## 调用非控制器命名空间下detail方法
例如,我们定义了一个逻辑层操作方法【方法需要时Public权限】为:
~~~
namespace Home\Logic;
use Think\Controller;
class UserLogic extends Controller{
public function detail($id){
return M('User')->find($id);
}
}
~~~
文件位于 **APP_PATH/Home/Logic/UserLogic.class.php**
相同模块下调用的方法是
~~~
$detail = R('User/detail',array(100000),'Logic');
~~~
调用文件位于 **APP_PATH/Home/Controller/HomeController.class.php**
不同模块下的调用方法是
~~~
$detail = R('Home/User/detail',array(100000),'Logic');
~~~
调用文件位于 **APP_PATH/Admin/Controller/IndexController.class.php**
也就是说,R函数的第三个参数支持指定调用的控制器层。
同时,R函数调用操作方法的时候可以支持操作后缀设置C('ACTION_SUFFIX'),如果你设置了操作方法后缀,仍然不需要更改R方法的调用方式。