Laravel控制器如何将驼峰格式请求输入转换为蛇形匹配模型属性
解决方案
核心转换方法
Laravel 内置的 Illuminate\Support\Str 类已经提供了驼峰转蛇形的原生方法 snake,就是你要找的Str::camel的反向实现:
use Illuminate\Support\Str; // 输出结果为 lifetime_sales echo Str::snake('lifetimeSales');
批量转换请求参数实现快速赋值
你可以通过集合的mapWithKeys方法批量转换所有请求参数的键名,之后直接用模型的批量赋值功能完成属性填充,无需手动逐个赋值:
use Illuminate\Support\Str; // 转换所有请求参数键为蛇形 $convertedInput = collect($request->all()) ->mapWithKeys(function ($value, $key) { return [Str::snake($key) => $value]; }) ->toArray(); // 批量赋值,需确保模型已配置$fillable允许对应字段批量赋值 $scopeCommercial = new ScopeCommercial($convertedInput); $scopeCommercial->save();
注意:需要提前在模型中设置
$fillable属性列出允许批量赋值的字段,或者设置protected $guarded = [];放开所有字段的批量赋值限制。
全局自动转换方案(推荐)
如果多个控制器都需要这个能力,可以封装为全局中间件,所有请求进入后自动将驼峰参数转为蛇形,控制器无需额外处理:
- 生成中间件
php artisan make:middleware ConvertCamelToSnake
- 编写中间件逻辑
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Str; class ConvertCamelToSnake { public function handle(Request $request, Closure $next) { $convertedInput = collect($request->all()) ->mapWithKeys(function ($value, $key) { return [Str::snake($key) => $value]; }) ->toArray(); $request->merge($convertedInput); return $next($request); } }
- 注册中间件到
app/Http/Kernel.php的对应中间件组,比如全局中间件组$middleware或者指定的路由组,之后所有请求参数会自动转换格式。
嵌套参数处理
如果存在多层嵌套的请求参数,可以用递归函数处理键名转换:
function camelToSnakeKeys(array $input): array { $result = []; foreach ($input as $key => $value) { $snakeKey = Str::snake($key); $result[$snakeKey] = is_array($value) ? camelToSnakeKeys($value) : $value; } return $result; } // 调用方式 $convertedInput = camelToSnakeKeys($request->all());
内容的提问来源于stack exchange,提问作者NicuVlad
相关产品推荐
相关产品推荐

