thinkphp8 控制器通过继承 think\controller 基类来定义,接收参数推荐使用 $request->param() 方法。该方法会自动从 url 查询字符串、post 数据或 json 请求体中提取参数,并支持类型转换和默认值设置,从而简化了多场景下的参数获取逻辑。

如何创建并注册一个基础控制器?
在 ThinkPHP8 中,创建一个控制器只需新建一个 PHP 文件并继承 think\Controller。框架的路由系统会自动将 HTTP 请求映射到控制器的公共方法上,无需手动配置路由即可实现基本的 MVC 结构。

<?php
namespace app\controller;
use think\Controller;
class User extends Controller
{
public function index()
{
return 'Hello World';
}
}
上述代码定义了一个名为 User 的控制器,其中包含一个 index 方法。当访问对应路由时,框架会实例化该类并调用此方法,返回字符串作为响应。这是最基础的控制器结构,后续所有功能都基于此扩展。
立即学习“PHP免费学习笔记(深入)”;
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
如何安全且灵活地接收混合来源的请求参数?
使用 $this->request->param() 可以统一处理 GET、POST 及 JSON 格式的参数。它会根据当前请求类型自动解析数据源,并通过传入字段名直接获取特定值,同时支持指定默认值和强制类型转换,避免空指针或类型错误。

<?php
namespace app\controller;
use think\Controller;
class Article extends Controller
{
public function create()
{
// 自动识别来源:GET/POST/JSON
$title = $this->request->param('title', '', 'trim');
$status = $this->request->param('status', 1, 'intval');
if (empty($title)) {
return json(['code' => 400, 'msg' => '标题不能为空']);
}
return json(['code' => 200, 'data' => ['title' => $title, 'status' => $status]]);
}
}
在 create 方法中,param() 方法首先尝试从请求中提取 title,若不存在则返回空字符串,并应用 trim 过滤;status 默认为整数 1。这种写法确保了即使前端未传递某些字段,后端也能获得符合预期类型的变量,防止因缺失参数导致的运行时异常。
当请求体为 JSON 格式时 param() 的行为是什么?
当客户端发送 Content-Type: application/json 的请求时,$this->request->param() 会优先解析 JSON 主体内容,将其视为关联数组进行参数提取。这意味着即使没有 URL 查询参数,只要 JSON 中包含对应键名,就能成功获取,实现了前后端数据交互的统一接口。


















