thinkphp 8.1 定义资源路由需要在路由文件中调用 route::resource 方法,并指定资源名称和对应的控制器类。编写 restful 接口时,只需在控制器中实现与 http 动词(get、post、put、delete)对应的方法,如 index、create、save、read、update 和 delete,框架会自动将请求映射到这些方法。

如何为单一资源定义标准 RESTful 路由?
通过 Route::resource('users', 'UserController') 即可生成完整的 RESTful 路由集合。该命令会自动注册七个子路由,分别对应资源的列表、创建表单、保存、详情、编辑表单、更新和删除操作。开发者无需手动配置每个 URL 规则,框架会根据 HTTP 方法和 URI 模式自动分发请求。

namespace app\controller;
use app\base\Controller;
class UserController extends Controller
{
public function index()
{
return json(['data' => '用户列表']);
}
public function create()
{
return '<form>...</form>';
}
public function save()
{
return json(['msg' => '创建成功']);
}
public function read($id)
{
return json(['id' => $id, 'data' => '用户详情']);
}
public function update($id)
{
return json(['msg' => '更新成功']);
}
public function delete($id)
{
return json(['msg' => '删除成功']);
}
}如何自定义资源路由的命名空间或前缀?
可以在 Route::resource 的第三个参数数组中设置 prefix 或 namespace 来调整路由结构。例如,设置 'prefix' => 'api/v1' 会使所有生成的路由路径前加上 /api/v1/users,适合多版本 API 管理。同时可以指定 'namespace' => 'app\api\v1' 以指向不同的控制器目录,保持代码结构清晰。
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
立即学习“PHP免费学习笔记(深入)”;

// route/app.php
Route::resource('users', 'UserController', [
'prefix' => 'api/v1',
'namespace' => 'app\api\v1'
]);当资源路由遇到重复定义的子路由时会发生什么?
如果手动定义了与资源路由同名的子路由,后加载的路由会覆盖先加载的资源路由。ThinkPHP 8.1 的路由匹配遵循“最后定义优先”原则。若希望保留资源路由的同时添加额外逻辑,应使用不同的 URI 路径或在控制器中通过中间件处理,避免直接冲突。例如,若已定义 Route::get('users/:id', 'User/read'),再调用 Route::resource('users', ...) 会导致 read 方法被资源路由中的 read 覆盖,除非手动调整顺序或使用别名。


















