Eloquent 模型属性为驼峰式 [Laravel 5.2] [Dingo API]

Eloquent model attributes as camel case [Laravel 5.2] [Dingo API]

我们的 Eloquent 模型具有遵循 Laravel 蛇形大小写约定的属性。

例如first_namelast_namecreated_at

尽管我的前端 (react) 遵循 javascript 驼峰式大小写标准。

例如firstNamelastNamecreatedAt

发送 API 响应时,是否有简单的方法将所有属性转换为驼峰式大小写?

我们正在使用 Larave 5.2 和 Dingo API 包。


更新

根据已接受的答案,我使用了自定义响应格式 方法。请参阅以下实施要点(包括单元测试):

https://gist.github.com/andrewmclagan/c5e0fe601d23f3b859b89a9f8922be68

你真的有几个选择。我不会去实施它们(除非需要),但这里有一些我能想到的:

在Laravel中:

  • 覆盖模型上的 toArray() 方法。当模型转换为 JSON 时,它会调用 toArray()。您可以使用此方法遍历并将所有键转换为驼峰式。不过,您需要在每个模型上覆盖它,但这可以通过父 class 或特征进行抽象。

在澳洲野狗中:

  • 对每个模型使用Transformers with the Response Builder. You could create a transformer for every model, or you could create one CamelTransformer and register。您将在转换器中将键转换为驼峰命名法。

  • 创建一个Custom Response Format。您可以创建扩展默认 json 格式的 camelJson 响应格式。使用逻辑覆盖必要的方法以驼峰命名键。

  • 使用ResponseWasMorphed event。您可以为 ResponseWasMorphed 事件创建一个事件处理程序,然后在其中进行驼峰命名。

这些选项中的任何一个都应该能够完成这项工作,这只是您希望这些转换的全局或粒度的问题。例如,修改 toArray() 将影响将模型转换为数组(或 json)的所有代码,而不仅仅是您的响应代码,因此您可能不希望您的更改是全局的。

我认为自定义响应格式可能是最适合您的情况的简便组合。

不要这样做。服务器不需要了解其客户端的任何信息。如果您的 React 应用程序需要处理驼峰式属性,请将该任务委托给客户端。他们应该在所有请求都通过的系统中。这是客户端在收到响应后必须对其进行转换的正确位置。

我通过以下解决了:

在你的controllerclass

return response()->json($model);
// => ['userName' => 'foo', 'userKey' => 'bar', ...]

要求

Laravel 5+

安装

$ composer require grohiro/laravel-camelcase-json:~1.0
# Laravel 5.7+
$ composer require grohiro/laravel-camelcase-json:~2.0

添加服务提供商。

config/app.php

'provider' => [
    // default providers
    // ...
    
    Grohiro\LaravelCamelCaseJson\CamelCaseJsonResponseServiceProvider::class,
],

参考:https://github.com/grohiro/laravel-camelcase-json