Laravel 8中如何简化处理请求参数的重复if判断代码?
Laravel 8 重复参数判断逻辑优化方案
你可以通过白名单+集合遍历的方式消除重复代码,优化后逻辑更简洁,后续新增配置项时也不需要重复写判断和更新逻辑,和原代码执行效果完全等价:
// 定义允许更新的配置键白名单 $allowUpdateKeys = ['logo', 'footerLogo', 'favicon']; // 从请求中提取指定参数,过滤空值后批量执行更新 collect($request->only($allowUpdateKeys)) ->filter() // 自动过滤值为null、空字符串的无效项,等价于原if判断逻辑 ->each(function ($value, $key) use ($setting) { $setting->updateOrCreate(['key' => $key], ['value' => $value]); });
如果你的PHP版本 >= 7.4,还可以用短箭头函数进一步简化写法:
collect($request->only($allowUpdateKeys)) ->filter() ->each(fn ($value, $key) => $setting->updateOrCreate(['key' => $key], ['value' => $value]));
优化收益
- 后续新增配置项仅需在
$allowUpdateKeys数组中新增对应键名即可,无需重复编写业务逻辑 - 白名单机制避免恶意传入未定义的配置键篡改数据,安全性更高
- 代码逻辑统一,维护成本更低
如果需要对参数做格式校验,还可以配合验证器使用,可靠性更强:
// 先做参数校验 $validated = $request->validate([ 'logo' => 'nullable|file|mimes:png,jpg,ico|max:1024', 'footerLogo' => 'nullable|file|mimes:png,jpg|max:1024', 'favicon' => 'nullable|file|mimes:ico|max:512', ]); // 再遍历更新 collect($validated)->filter()->each(fn ($value, $key) => $setting->updateOrCreate(['key' => $key], ['value' => $value]));
内容的提问来源于stack exchange,提问作者Fredericka Hartman
相关产品推荐
相关产品推荐

