Laravel全局修改API响应JSON键格式的方法与工具咨询
Laravel全局统一API响应JSON键为驼峰式
方法一:自定义全局响应中间件
这是无需依赖第三方包的灵活方案,可完全自定义转换规则:
- 创建中间件:
php artisan make:middleware CamelCaseResponse
- 在
app/Http/Middleware/CamelCaseResponse.php中编写转换逻辑:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Response; use Illuminate\Support\Str; class CamelCaseResponse { public function handle($request, Closure $next) { $response = $next($request); if ($response instanceof Response && is_array($response->original)) { $response->setContent($this->convertToCamelCase($response->original)); } return $response; } private function convertToCamelCase(array $array): array { $result = []; foreach ($array as $key => $value) { // 先将下划线格式转为基础驼峰 $camelKey = Str::camel($key); // 特殊处理末尾的缩写:Id→ID、Url→URL $camelKey = preg_replace('/Id$/', 'ID', $camelKey); $camelKey = preg_replace('/Url$/', 'URL', $camelKey); $result[$camelKey] = is_array($value) ? $this->convertToCamelCase($value) : $value; } return $result; } }
- 注册中间件:在
app/Http/Kernel.php的$middlewareGroups中,为api组添加该中间件:
protected $middlewareGroups = [ 'api' => [ // 已有中间件... \App\Http\Middleware\CamelCaseResponse::class, ], ];
方法二:基于API资源类统一格式
如果项目已在使用API资源类,可通过基础资源类实现全局转换:
- 创建基础资源类:
php artisan make:resource BaseResource
- 在
app/Http/Resources/BaseResource.php中重写toArray方法:
<?php namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Support\Str; class BaseResource extends JsonResource { public function toArray($request) { $array = parent::toArray($request); $camelArray = []; foreach ($array as $key => $value) { $camelKey = Str::camel($key); $camelKey = preg_replace('/Id$/', 'ID', $camelKey); $camelKey = preg_replace('/Url$/', 'URL', $camelKey); $camelArray[$camelKey] = $value; } return $camelArray; } }
- 所有业务资源类继承该基础类,例如
ProductCategoryResource:
<?php namespace App\Http\Resources; class ProductCategoryResource extends BaseResource { public function toArray($request) { return parent::toArray($request); } }
方法三:使用第三方工具包
可借助现成包快速实现转换,比如laravel-camel-case-keys:
- 安装包:
composer require vluzrmos/laravel-camel-case-keys
- 注册服务提供者(Laravel 5.5+支持自动发现,可跳过):
在config/app.php的providers数组中添加:
Vluzrmos\CamelCaseKeys\CamelCaseKeysServiceProvider::class,
- 发布配置文件(可选):
php artisan vendor:publish --provider="Vluzrmos\CamelCaseKeys\CamelCaseKeysServiceProvider"
- 在
config/camelcase.php中自定义规则,比如设置uppercase_acronyms为['ID', 'URL'],匹配需求中的缩写格式。
注意事项
- 若响应包含嵌套数组,需确保转换逻辑覆盖所有层级;
- 分页响应需单独处理元数据键名(如
current_page转currentPage),可在中间件中增加分页对象的判断处理; - 测试时覆盖所有响应场景,确保键名转换完全符合预期。
内容的提问来源于stack exchange,提问作者dinesh balan
相关产品推荐
相关产品推荐

