欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

TP 3.2 Rest使用

程序员文章站 2024-01-26 08:37:10
...
thinkphp 3.2 rest 的操作
本人是做终端开发的,以前没有搞过php,因为有需求看了看,thinkphp这周刚开始看,因为来的时候下载的最新版,终端开发php作为后台大多是接口,所以想学习使用下tp的rest,看了几个相关的帖子都是讲的老版本的,extent下面有这个,然后有个开关开启就行了,又发现怎么开启模式后整个程序都变成了rest模式,没有测试,反正下了新版本中开启了无效,看了下源码没有这块的逻辑。

昨天发现git提交中加上了RestController,于是自己折腾了下,貌似调通了,直接继承的,这样比较灵活,想某个模块下面那个controller实现rest模式都可以。由于还没有深入看才点皮毛,也不知道用法对不对,说的不对的地方大家多指正。

1、下载最新的框架,最好是git上面的开发版本,不要3.2那个正式版,貌似RestController还没有加进去。
.htaccess 文件随便以前的或者one think里面复制一个过来吧。这样输入网址的时候可以免掉index.php 。环境配置之类的就不说了,运行下。程序下面application就有。到application home controller目录 新建一个文件。
内容如下
//InfoController.class.php namespace Home\Controller;
use Think\Controller\RestController;
class InfoController extends RestController {

//default is json
public function read_json(){
echo "read_default_get_json";
}

//get
public function read_get_json(){
echo "read_get_json";
}

//delete
public function read_delete_json(){
echo "read_delete_json";
}

//put/update
public function read_put_json(){
echo "read_put_json";
}

//get
public function read_post_json(){
echo "read_post_json";
}

//custom
public function read_custom_json(){
echo "read_custom_json";
}
}
这个时候用ie 等浏览器访问是不行的,会访问出现403错误的,至于为什么可以看下源码RestController中的call方法,会根据 请求端的 请求头 接受类型或者设置好的默认类型等进行一系列的拼接方法,如果拼接的方法存在就调用,不存在就(_ERROR_ACTION_)403了。

浏览器中访问的话,call方法大概会适配出来的访问action为read_get_html 因为我上面没有实现这个方法,所以访问会失败。

所以这个时候用curl去请求。windows下面curl没有的话去安装一个吧。
然后开始访问如下:

TP 3.2 Rest使用

我的url是本地host中做了个映射,也可以直接127.0.0.1这个就看自己的配置了。
可见通过请求类型的不同访问到了我们的controller中不同的动作,而我们的url只有一个。

上面我的代码中有个read_json方法,这个是永远执行不到的,因为RestController defaultMethod为get,不识别的请求类型 比如我最后一个other请求会使用默认的方式,拼接出来的为 read_get_json,这个方法存在所以默认都会执行该方法了,但是如果没有这个方法方法,比如把这个方法注释掉,当识别不出来的时候请求类型的时候就会执行read_json。

另外就是测试了下CUSTOM, 我的意思是看下定制自己的请求类型。当然这样做不符合标准,有get post put delete一般需求都是相当的够用。这里只是做一个测试。

直接请求是会到默认的去的,但是我这里成功执行到了,需要在RestController中修改$allowMethod,如下
// REST允许的请求类型列表
protected $allowMethod = array('get','post','put','delete' ,'custom');
当然我也不建议这样直接修改源码的,最好是遵循设计模式,面向扩展而不面向修改,有这样的需求的时候在上层利用config进行动态配置,而不要修改框架。
当然因为我没有看明白,还没有看见这个东西目前能动态配置,我想稍微修改下就可以做到了,大概扫了下3.1的代码这块貌似灵活点,可能3.2还没有加全吧。

没有搜到什么教程,主要新版本刚出来,就自己琢磨了下,大概就是这么回事了,rest就是一个建议标准,RestController 中也就是$_SERVER['HTTP_ACCEPT']拼接了下方法,如果没有这个东西自己rewrite或者就写insert get delete等方法返回json,然后通过不同的url请求数据或者说rewrite下其实都一样。只是这个潮流,看起来高端一点。 应该差不多了吧,剩下的有问题,欢迎交流指正~

AD:真正免费,域名+虚机+企业邮箱=0元