ThinkPHP6开发商城需手动规划多应用结构、设计goods与sku分表、实现RBAC权限解耦、微信小程序对接时强制Redis缓存,核心在于架构设计而非命令生成。

think 命令本身不直接支持“一键生成商城”,所谓“ThinkPHP6.0商城开发”,本质是用框架能力组合实现业务模块,不是靠某个命令自动产出完整商城。真要开干,得从结构规划、权限分层、商品模型设计这些地方一环一环往下推。
tp6 商城必须先搞清楚单应用还是多应用模式
默认安装出来的是单应用(app/ 目录下直接放 controller/model),但商城几乎必然要拆前后台:用户端(H5/小程序)、管理后台(PC)、API 接口层。这时候就得切到多应用模式。
- 手动在
app/下建api/、admin/、mobile/等子目录,每个目录里复制一份controller/、model/、view/(如果需要) - 修改
config/app.php中的'app_multi' => true,并配置'default_app' => 'api'这类默认入口 - 路由必须按应用隔离:
route/api.php只处理 API 请求,route/admin.php专管后台,否则权限混在一起极难维护 - 注意
public/index.php不动,所有请求仍走这个单一入口,只是框架根据 URL 路径自动识别应用名
商品表和 SKU 表怎么设计才扛得住并发抢购
很多新手直接用一张 goods 表存所有字段,结果秒杀时库存扣减失败、超卖频发。TP6 本身不解决数据库设计问题,但模型层能帮你约束逻辑。
-
goods表只存基础信息:名称、分类、主图、详情、状态等;库存字段必须去掉 - 单独建
goods_sku表,每条记录对应一个规格组合(如 “颜色:黑,尺码:M”),含stock、price、sku_code - 扣库存必须用原子操作:
$sku->where('id', $id)->where('stock', '>', 0)->dec('stock', 1),且加事务包裹 - 别依赖 PHP 层判断“有没有库存”,那会漏掉并发请求;数据库 WHERE 条件才是唯一可信防线
RBAC 权限系统在 tp6 里怎么避免写死菜单
硬编码 ['user/list', 'order/edit'] 到角色表里,后期改个 URL 就全挂。tp6 没内置 RBAC,得自己搭,关键是把“权限”和“路由”解耦。
- 菜单数据存在数据库,字段至少包含:
title、url(对应路由名或 path)、pid、sort、is_show - 用
Route::getRule('admin.goods.index')动态查路由是否注册,防止菜单指向不存在的控制器方法 - 中间件里不做字符串匹配,而是查当前请求的路由名(
$request->rule()->getName())是否在用户可访问列表中 - 别把权限校验写在每个控制器里——统一丢进
app/middleware/AuthCheck.php,配合middleware.php配置全局或分组中间件
微信小程序对接时 think\facade\Cache 不能直接用 file 驱动
本地开发用 file 缓存没问题,但上线后小程序频繁调 login 接口,Cache::set('session_' . $code, $data) 如果还走文件,会因 NFS 或共享存储导致缓存不同步、取不到值。
立即学习“PHP免费学习笔记(深入)”;
- 生产环境必须切到 Redis:
config/cache.php中把'default' => 'redis',并确保redis配置正确 - 小程序登录态建议用
cache('wx_session_' . $code, $data, 7200)显式指定过期时间,别依赖驱动默认值 - 别在控制器里直接 new Redis()——违反框架约定,也绕过了连接池和配置管理
- 测试时可用
php think clear --cache清空,但线上禁止随意执行,容易误清其它业务缓存



















