ThinkPHP的“get\post\put\delete“请求

发布于:2025-04-01 ⋅ 阅读:(14) ⋅ 点赞:(0)

首先了解一下这四个请求的区别

1.GET 请求

用途:获取资源(只读操作,不修改服务器数据)。
特点:
参数通过 URL 的 查询字符串(Query String) 传递(例如 /book?id=1)。
数据在 URL 中可见,不安全(不适合敏感信息)。
幂等性:多次请求结果相同。
安全性:不会修改服务器资源。

2.POST 请求

用途:创建新资源(每次请求可能产生不同结果)。
特点:
参数通过 请求体(Request Body) 传递(支持 JSON、表单等格式)。
数据在 URL 中不可见,相对安全。
非幂等性:多次提交可能创建多个资源。

3.PUT 请求

用途:全量更新资源(要求客户端提供完整的资源数据)。
特点:
参数通过 请求体 传递(如 JSON)。
幂等性:多次请求结果相同(例如重复更新同一资源,最终状态一致)。
需要指定资源的唯一标识(如 /books/1)。

4.DELETE 请求

用途:删除资源。
特点:
通常不需要请求体,资源标识通过 URL 指定(如 /books/1)。
幂等性:多次删除同一资源,结果一致(第一次删除成功,后续返回 404)。

使用thinkphp创建四种请求的样例

1.get请求

注意这段代码是在controller层的,同时不能直接return 字符串以外别的类型,所以进行了json转换。

	#[Route("GET", "getPage")]
    public function page()
    {
        return json_encode(['1', '2']);
    }

请求结果
在这里插入图片描述

2.post请求

注意这段代码是在controller层的,是使用halt直接中断输出,他会里面的内容进行dump。

	#[Route("POST", "add")]
    public function add()
    {
        halt($this->request->post());
    }

请求结果
在这里插入图片描述

3.put请求

注意这段代码是在controller层的,isPut会判断请求类型是不是Put,其实在定制路由时就限制了请求类型,这里不判断也是可以的。

	#[Route("PUT", "update")]
    public function update()
    {
        if ($this->request->isPut()) {
            halt($this->request->param());
        }
    }

请求结果
在这里插入图片描述

4.delete请求

注意这段代码是在controller层的,可以在param里写你要接受的指定参数。

	#[Route("DELETE", "delete")]
    public function delete()
    {
        halt($this->request->param('id'));
    }

请求结果
在这里插入图片描述

完整代码

namespace app\controller;

use app\BaseController;
use think\annotation\route\Group;
use think\annotation\route\Route;

#[Group("Books")]
class Books extends BaseController
{
	#[Route("GET", "getPage")]
    public function page()
    {
        return json_encode(['1', '2']);
    }

	#[Route("POST", "add")]
    public function add()
    {
        halt($this->request->post());
    }

	#[Route("PUT", "update")]
    public function update()
    {
        if ($this->request->isPut()) {
            halt($this->request->param());
        }
    }
	
	#[Route("DELETE", "delete")]
    public function delete()
    {
        halt($this->request->param('id'));
    }
}

注意如果use think\annotation\route\Group; use think\annotation\route\Route;报错。
需要安装额外插件

composer require topthink/think-annotation

网站公告

今日签到

点亮在社区的每一天
去签到