## Rest控制器

>[danger] 新版不再推荐使用Rest控制器,建议用资源控制器替代。下一个大版本即将废弃。

如果需要让你的控制器支持RESTful的话,可以使用Rest控制器,在定义访问控制器的时候直接继承`think\controller\Rest`即可,例如:

~~~

namespace app\index\controller;

use think\controller\Rest;

class Blog extends Rest

{

}

~~~

配合示例需要,我们首先在应用配置文件中添加:

~~~

// URL伪静态后缀

'url_html_suffix' => 'html|xml|json|jsonp',

~~~

### RESTFul方法定义

`RESTFul`方法和标准模式的操作方法定义主要区别在于,需要对请求类型和资源类型进行判断,大多数情况下,通过路由定义可以把操作方法绑定到某个请求类型和资源类型。如果你没有定义路由的话,需要自己在操作方法里面添加判断代码,示例:

~~~

namespace app\index\controller;

use think\controller\Rest;

class Blog extends Rest

{

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`获取当前的请求类型。

### RESTFul 输出

#### 使用Rest类提供的 response 方法

~~~

$this->response($data, 'json', 200);

~~~

#### 使用`think\Response`类

~~~

Response::create($data, 'json')->code(200);

~~~

#### 使用助手函数

~~~

json($data, 200);

~~~

$data为需要输出的数据,第二个参数为输出数据的http状态码

方法会自动对$data数据进行输出类型编码,目前支持的包括xml,json,jsonp,html等编码格式输出,例如:

~~~

// 输出 json 格式数据

json($data, 200);

// 输出 jsonp 格式数据

jsonp($data, 200);

// 输出 xml 格式数据

xml($data, 200);

~~~

除了普通方式定义Restful操作方法外,系统还支持另外一种自动调用方式,就是根据当前请求类型和资源类型自动调用相关操作方法。系统的自动调用规则是:

| 定义规范 | 说明 |

|---|---|

| 操作名_提交类型_资源后缀 | 标准的Restful方法定义,例如 read_get_pdf |

| 操作名_资源后缀 | 当前提交类型和restDefaultMethod相同的时候,例如read_pdf |

| 操作名_提交类型 | 当前资源后缀和restDefaultType相同的时候,例如read_post |

这种方式的rest方法定义采用了空操作机制,所以要使用这种方式的前提就是不能为当前操作定义方法,如果检测到相关的restful方法则不再检查后面的方法规范,例如我们定义了InfoController如下:

~~~

namespace app\index\controller;

use think\controller\Rest;

class Info extends Rest

{

public function read_get_xml($id)

{

// 输出id为1的Info的XML数据

}

public function read_xml($id)

{

// 输出id为1的Info的XML数据

}

public function read_json($id)

{

// 输出id为1的Info的json数据

}

}

~~~

如果我们访问的URL是:

~~~

http://serverName/index/info/read/id/1.xml

~~~

假设我们没有定义路由,这样访问的是Info模块的read操作,那么上面的请求会调用Info类的 read_get_xml方法,而不是read_xml方法,但是如果访问的URL是:

~~~

http://serverName/index/info/read/id/1.json

~~~

那么则会调用read_json方法。

黄永成think php rest,Rest控制器相关推荐

  1. 永成科技C++笔试题

    最后几个题有点难度,在这里说一下: 永成科技C++笔试题 2013-11-19 1.将1亿以内的质数存到一个超级大的数组中,用算法如何实现? 使用"筛法"求解1亿以内的质数的程序的 ...

  2. 黄永刚单晶塑性知识点汇总

    1. 欧拉角和米勒指数相互转化 1.1 欧拉角转换为Miller指数,注意第三个公式有根号,更正杨平老师那本书的错误. 1.2 Miller指数转为欧拉角 公式: 代码: for i=1:Lhkl=[ ...

  3. 大话如何从一个电机发展成机器人本体加机器人控制器

    大话如何从一个电机发展成机器人本体加机器人控制器 最近学了如何用EtherCAT IGH 控制一个电机之后,就在想如何现在距离拥有一个机器人本体和机器人控制器还有多远呢? 下面的内容比较的自己的粗浅的 ...

  4. 一年带货2个亿,“小黄鸭”成国内最赚钱IP

    来源 | 电商在线(ID:dianshangmj)  作者 | 王亚琪 这几年IP大热,每个知名IP都是棵摇钱树,赚钱能力超乎想象. 如果做一个赚钱能力评比,你觉得米老鼠,哈利波特,Hello kit ...

  5. 拼多多市值超2100亿美元 黄峥成中国第二大富豪

    在周三的美股交易中,拼多多股价继续大涨逾7%,创下历史新高.截至收盘,拼多多股价报收于179.11美元,涨幅达7.77%,目前总市值约2196.47亿美元. 值得注意的是,随着拼多多股价的不断上涨,作 ...

  6. 金科股份称黄红云成被执行人和离婚有关,公司股价、毛利率均走低

    金科股份再次遇到麻烦事.5月24日,金科股份(SZ:000656)发布称其公告,确认该公司实际控制人黄红云被法院列为被执行人一事属实. 根据媒体此前报道,金科股份实控人黄红云成为被执行人,执行标的金额 ...

  7. 微型计算机的运算器控制器成,微型计算机的运算器、控制器集成在一块芯片上总称是( )。...

    答案 查看答案 解析: [解析题]占发明创新1%不到,它需要综合运用所有的知识,还要创造新知识,如计算机的发明,属于第( )等级. [解析题]关于计算机运算速度,下列说法正确的是() [解析题]计算机 ...

  8. 读《零成本创业》-黄永宏 (1)

    "上班是看一个老板的脸色,创业是看很多客户的脸色.如果我的专长是卖东西,那么我为何只看一个老板的脸色,请他赏我饭吃?这样即使我表现再好,如果他翻脸,我还是会丢了工作.创业的话,一个客户翻脸, ...

  9. 读《零成本创业》-黄永宏 (2)

    第三堂 换颗老板头脑 内地几乎什么都要排队,但几乎每次排队都没什么用,总是会有插队的人.我在上海的火车站就已经领教过了,闸门一开,原本用来坐的一排排椅子,竟然能变成跨栏.下面这个故事,即使不是千真万确 ...

  10. 玩转python网络爬虫 黄永祥_玩转Python网络爬虫

    第1章理解网络爬虫 1 1.1 爬虫的定义 1 1.2 爬虫的类型 2 1.3 爬虫的原理 3 1.4 爬虫的搜索策略 5 1.5 反爬虫技术及解决方案 6 1.6 本章小结 8 第2章爬虫开发基础 ...

最新文章

  1. URL编码以及GET和POST提交乱码解决方案
  2. DCMTK:使用dcmsr API创建示例结构化报告
  3. 项目笔记:2017年(SSM架构)
  4. 批量梯度下降 linux,梯度下降的三种形式BGD,SGD,MBGD(MSGD)
  5. 如何给SAP云平台的账号分配Leonardo机器学习服务的实例
  6. VMware虚拟机中CentOS网络设置
  7. 多方法接口回调_浅析接口定义和接口回调
  8. [动态规划|字符串] leetcode 5 最长回文子串
  9. cv::createTrackbar cv::threshold
  10. 计算机网络自顶向下方法第6章-链路层和局域网.1
  11. 苹果Mac所有端口说明,将配件连接到 Mac
  12. ERP知识普及连载(13)
  13. LINUX下载编译libgsm
  14. python识别图片文字、并返回文字坐标_简易OCR图片文字识别工具的进一步改进(增加显示图片的功能)...
  15. 中医处方软件加方开方操作
  16. VSCODE一个阴坑
  17. 智能结算新方案,这个商品识别算法你值得拥有!
  18. matlab编程999玫瑰花,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神...
  19. 常见的继电接触器控制线路总结
  20. JVM基础知识---对象的创建过程

热门文章

  1. 《Linux系统最佳实践工具:命令行技术》新书抢先看
  2. 远程线程注入技术 屏蔽ctrl+alt+del
  3. TM1638数码管显示板(8数码管+16按键)单片机C语言驱动程序(显示功能)
  4. 解决chrome添加扩展时的报错:“此项内容已下载并添加到Chrome中”
  5. HttpResponseCode错误码整理
  6. vue和js点击下载pdf,word,png,jpg等格式的文件,解决点击下载pdf却是打开预览的问题
  7. 360桌面隐藏应用 android代码,360手机桌面上的隐藏应用怎么设置?
  8. 【转载】高斯滤波器详解
  9. 用Java代码实现一个简单的聊天室功能
  10. itunes安装后不能用,双击后等很长时间,提示:ITUNES 驱动程序缺少用于导入和刻录的CD与DVD注册的设置...