平时写 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;
}
语法说明:
['参数名', 默认值]:参数不存在则使用默认值[['a','b'], 默认值]:读取 a[b] 二维数组参数$this->input(),自动兼容 GET / POST / JSON 请求[['user','name']]和[['user','phone']]会冲突,不适合同时读取同一个一级 key 下的多个二级字段
可以的
谢谢大佬,太牛了 一直在用你的插件