Webman 自定义 Request 增加 more 方法,对标 CRMEB getMore 风格

wangsky522

平时写 CRMEB 习惯了getMore/postMore批量获取参数的写法,迁移到 Webman 后发现原生only不支持单独给每个参数设置默认值,每次控制器写一堆$this->input()很啰嗦。
基于 webman 的Request类做简单扩展,新增more()方法,语法风格对齐 CRMEB,支持批量读取参数,支持自定义默认值,还支持读取二维嵌套参数。

/**
 * 获取参数增强方法
 * @param array $params
 * @return array
 */
public function more(array $params): array
{
    $p = [];
    foreach ($params as $param) {
        if (!is_array($param)) {
            $p[$param] = $this->input($param);
        } else {
            if (!isset($param[1])) $param[1] = '';
            if (is_array($param[0])) {
                $name = $param[0][0] . '/' . $param[0][1];
                $keyName = $param[0][0];
            } else {
                $name =  $param[0];
                $keyName = $param[0];
            }
            $p[$keyName] = $this->input($name, $param[1]);
        }
    }
    return $p;
}

语法说明:

  1. 字符串形式:直接写参数名,不传默认值
  2. 数组形式 ['参数名', 默认值]:参数不存在则使用默认值
  3. 嵌套参数 [['a','b'], 默认值]:读取 a[b] 二维数组参数

特点

  1. 继承 webman 原生 Request,低侵入,直接替换文件即可使用
  2. 底层复用$this->input(),自动兼容 GET / POST / JSON 请求
  3. 语法和 CRMEB 的 getMore 保持一致,熟悉 CRMEB 的 PHPer 上手零成本
  4. 一次性获取白名单参数,避免直接接收全部请求参数带来的脏数据问题

局限性

  1. 嵌套参数场景下,同第一层 key 会发生覆盖,例如[['user','name']]和[['user','phone']]会冲突,不适合同时读取同一个一级 key 下的多个二级字段
  2. 无自动 trim、类型转换、参数校验功能,取值后仍需自行处理校验和类型转换
  3. 适合简单后台、接口项目,复杂场景建议二次改造优化
33 1 1
1个评论

Tinywan

可以的

  • wangsky522 14小时前

    谢谢大佬,太牛了 一直在用你的插件

wangsky522

100
积分
0
获赞数
0
粉丝数
2024-09-11 加入
🔝