You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Model作为变量代入代码替代switch结构避免编写重复查询逻辑

解决方案

完全可以合并,PHP原生支持将类名字符串作为变量调用静态方法,你只需要先做一次合法模型白名单校验即可,避免用户传入恶意类名引发安全问题。

优化后的代码如下:

// 先定义允许的模型白名单
$allowModels = [
    Review::class,
    Question::class,
    Answer::class
];

// 校验传入的类型是否合法
if (!in_array($data['model_type'], $allowModels)) {
    return $this->jsonError('404', 404);
}

// 直接用类名变量调用查询方法
$modelClass = $data['model_type'];
$record = $modelClass::query()
    ->where('id', $data['model_id'])
    ->whereNotNull('published_at')
    ->first();

注意事项

  • 必须加白名单校验,不要直接使用用户传入的未校验参数作为类名,防止攻击者传入意料之外的类触发代码执行风险
  • 如果你用的是Laravel框架的多态关联,也可以直接用getMorphClass相关方法做映射校验,逻辑本质和上面的白名单方案一致

内容的提问来源于stack exchange,提问作者Sergey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:45:01