住房与城乡建设部网站,自助建网站哪个好,网上投诉平台,网站建设调查表怪我咯2017-04-10 17:12:231楼TP的controller其实有很多种的HproseController,JsonRpcController,RestController,RpcController,YarController我拿RestController给你介绍一下RESTFul方法的操作方法定义主要区别在于#xff0c;需要对请求类型和资源类型进行判断#xff0c;…怪我咯2017-04-10 17:12:231楼TP的controller其实有很多种的HproseController,JsonRpcController,RestController,RpcController,YarController我拿RestController给你介绍一下RESTFul方法的操作方法定义主要区别在于需要对请求类型和资源类型进行判断大多数情况下通过路由定义可以把操作方法绑定到某个请求类型和资源类型。如果你没有定义路由的话需要自己在操作方法里面添加判断代码示例namespace Home\Controller;use Think\Controller\RestController;Class InfoController extends RestController {Public function rest() {switch ($this-_method){case get: // get请求处理代码if ($this-_type html){}elseif($this-_type xml){}break;case put: // put请求处理代码break;case post: // post请求处理代码break;}}}在Rest操作方法中可以使用$this-_type获取当前访问的资源类型用$this-_method获取当前的请求类型。REST控制器类还提供了response方法用于REST输出 用法如下$this-response($data,json);Response方法会自动对data数据进行输出类型编码目前支持的包括xml/json/html。除了普通方式定义Restful操作方法外系统还支持另外一种自动调用方式就是根据当前请求类型和资源类型自动调用相关操作方法。要使用这种方式的前提就是不能为当前操作定义方法这样在空操作的检查之前系统会首先按照上面的定义规范顺序检查是否存在方法定义如果检测到相关的restful方法则不再检查后面的方法规范例如我们定义了InfoController如下namespace Home\Controller;use Think\Controller\RestController;Class InfoController extends RestController {protected $allowMethod array(get,post,put); // REST允许的请求类型列表protected $allowType array(html,xml,json); // REST允许请求的资源类型列表Public function read_get_html(){// 输出id为1的Info的html页面}Public function read_get_xml(){// 输出id为1的Info的XML数据}Public function read_xml(){// 输出id为1的Info的XML数据}Public function read_json(){// 输出id为1的Info的json数据}}如果我们访问的URL是http://www.domain.com/Info/read/id/1.xml假设我们没有定义路由这样访问的是Info控制器的read操作那么上面的请求会调用InfoController类的 read_get_xml方法而不是read_xml方法但是如果访问的URL是http://www.domain.com/Info/read/id/1.jso...那么则会调用read_json方法。如果我们访问的URL是http://www.domain.com/Info/read/id/1.rss由于我们不允许rss资源类型的访问所以调用的方法其实是read_html方法。