雄辩的模型属性作为骆驼案例 [Laravel 5.2] [Dingo API]

Posted

技术标签:

【中文标题】雄辩的模型属性作为骆驼案例 [Laravel 5.2] [Dingo API]【英文标题】:Eloquent model attributes as camel case [Laravel 5.2] [Dingo API] 【发布时间】:2016-07-27 16:52:00 【问题描述】:

我们的 Eloquent 模型具有遵循 Laravel 蛇案例约定的属性。

例如first_namelast_namecreated_at

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

例如firstNamelastNamecreatedAt

在发送 API 响应时,有没有一种简单的方法可以将所有属性转换为驼峰式?

我们使用的是 Larave 5.2 和 Dingo API 包。


更新

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

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

【问题讨论】:

【参考方案1】:

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

在 Laravel 中:

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

在野狗:

将Transformers 与Response Builder 一起使用。您可以为每个模型创建一个转换器,或者您可以为每个模型创建一个 CamelTransformer 和 register。您可以在转换器中将键转换为驼峰式。

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

使用ResponseWasMorphed event。您可以为ResponseWasMorphed 事件创建一个事件处理程序,然后在其中检查并用驼峰式命名您的密钥。

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

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

【讨论】:

正是我想要的,谢谢。在您的解释中,我还认为“自定义响应格式”是关键!谢谢!【参考方案2】:

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

【讨论】:

【参考方案3】:

我通过以下方式解决了:

在您的controller 班级中

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

【讨论】:

以上是关于雄辩的模型属性作为骆驼案例 [Laravel 5.2] [Dingo API]的主要内容,如果未能解决你的问题,请参考以下文章

雄辩的关系,模型的链接(Laravel 5.4)

Laravel 通过属性获得雄辩的查询构建器关系

spring-boot骆驼案例嵌套属性作为环境变量

Laravel 5.6 |雄辩的一对多关系

在laravel 5.6中雄辩地返回null值

Laravel 5.4雄辩的一对多关系