You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel全局修改API响应JSON键格式的方法与工具咨询

Laravel全局统一API响应JSON键为驼峰式

方法一:自定义全局响应中间件

这是无需依赖第三方包的灵活方案,可完全自定义转换规则:

  1. 创建中间件:
php artisan make:middleware CamelCaseResponse
  1. 在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;
    }
}
  1. 注册中间件:在app/Http/Kernel.php的$middlewareGroups中,为api组添加该中间件:
protected $middlewareGroups = [
    'api' => [
        // 已有中间件...
        \App\Http\Middleware\CamelCaseResponse::class,
    ],
];

方法二:基于API资源类统一格式

如果项目已在使用API资源类,可通过基础资源类实现全局转换:

  1. 创建基础资源类:
php artisan make:resource BaseResource
  1. 在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;
    }
}
  1. 所有业务资源类继承该基础类,例如ProductCategoryResource:
<?php

namespace App\Http\Resources;

class ProductCategoryResource extends BaseResource
{
    public function toArray($request)
    {
        return parent::toArray($request);
    }
}

方法三:使用第三方工具包

可借助现成包快速实现转换,比如laravel-camel-case-keys:

  1. 安装包:
composer require vluzrmos/laravel-camel-case-keys
  1. 注册服务提供者(Laravel 5.5+支持自动发现,可跳过):
    在config/app.php的providers数组中添加:
Vluzrmos\CamelCaseKeys\CamelCaseKeysServiceProvider::class,
  1. 发布配置文件(可选):
php artisan vendor:publish --provider="Vluzrmos\CamelCaseKeys\CamelCaseKeysServiceProvider"
  1. 在config/camelcase.php中自定义规则,比如设置uppercase_acronyms为['ID', 'URL'],匹配需求中的缩写格式。

注意事项

  • 若响应包含嵌套数组,需确保转换逻辑覆盖所有层级;
  • 分页响应需单独处理元数据键名(如current_page转currentPage),可在中间件中增加分页对象的判断处理;
  • 测试时覆盖所有响应场景,确保键名转换完全符合预期。

内容的提问来源于stack exchange,提问作者dinesh balan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:15:15