雄辩的模型属性作为骆驼案例 [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_name
、last_name
和 created_at
虽然我的前端 (react) 遵循 javascript 驼峰式大小写标准。
例如firstName
、lastName
和 createdAt
在发送 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]的主要内容,如果未能解决你的问题,请参考以下文章