Eloquent模型属性为骆驼大小写[Laravel 5.2][Dingo API]
Eloquent model attributes as camel case [Laravel 5.2] [Dingo API]
我们的Eloquent模型具有遵循Laravel snake case约定的属性。
例如first_name
、last_name
和created_at
尽管我的前端(react)遵循javascript camel-case标准。
例如firstName
、lastName
和createdAt
在发送API响应时,是否有一种简单的方法可以将所有属性转换为骆驼大小写?
我们正在使用Larave 5.2和Dingo API软件包
更新
根据接受的答案,我使用了自定义响应格式方法。有关实现(包括单元测试),请参阅以下要点:
https://gist.github.com/andrewmclagan/c5e0fe601d23f3b859b89a9f8922be68
您确实有一些选择。我不会去实施它们(除非需要),但这里有几个我能想到的:
在Laravel:
- 覆盖模型上的
toArray()
方法。当一个模型被转换为JSON时,它会调用toArray()
。您可以使用此方法来遍历并将所有密钥转换为camelCase。不过,您需要在每个模型上覆盖它,但这可以通过父类或特性进行抽象
在Dingo:
-
将Transformers与响应生成器一起使用。您可以为每个模型创建一个转换器,也可以创建一个
CamelTransformer
并将其注册到每个模型中。您可以在转换器中将关键帧转换为camelBase。 -
创建自定义响应格式。您可以创建一个扩展默认json格式的
camelJson
响应格式。用camelCase键的逻辑覆盖必要的方法。 -
使用
ResponseWasMorphed
事件。您可以为ResponseWasMorphed
事件创建一个事件处理程序,并在其中遍历和camelCase键。
这些选项中的任何一个都应该能够完成这项工作,这只是你希望这些转换具有多大的全局性或粒度的问题。例如,修改toArray()
将影响所有将模型转换为数组(或json)的代码,而不仅仅是响应代码,所以你可能不希望你的更改具有全局性。
我认为自定义响应格式可能是您的情况下轻松和适当的最佳组合。
不要这样做。服务器不需要了解其客户端的任何信息。如果您的React应用程序需要处理camel情况下的属性,请将该任务委托给客户端。它们应该在系统中具有所有请求通过的点。这是客户端在收到响应后必须对其进行转换的正确位置。
我通过以下方式解决:
在您的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
- 如何更改bigquery API中的计费层选项
- Amazon S3 REST API大小不正确
- 客户端服务器REST API captcha实现
- 使用Facebook live API创建实时视频对象时的隐私设置
- Ajax Live搜索发布到Laravel视图
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- API密钥使用和检查示例
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 如何将javascript日期传递到laravel 4 API时间戳
- Eloquent模型属性为骆驼大小写[Laravel 5.2][Dingo API]
- 如何处理php(Laravel-api)和javascript(AngularJS)之间的日期时间
- 让Laravel应用程序同时服务于基于浏览器的应用程序,并充当iPhone和Android应用程序的API的最佳实践是什
- Angular JS & CSRF with RESTFull API Laravel
- 使用Laravel作为API存储数据,并带有ajax功能
- Laravel,Dingo Api和Node.js:数据不传递
- 如何从Laravel API传递Javascript日期对象(格式化的datetime)
- 关于laravel 5.2 api服务器的Axios get请求错误问题
- 我的laravel应用程序的预览/放大/缩放图像api