4

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

例如first_namelast_namecreated_at

虽然我的前端(反应)遵循 javascript 驼峰式标准。

例如firstNamelastNamecreatedAt

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

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


更新

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

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

4

3 回答 3

2

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

在 Laravel 中:

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

在野狗:

  • TransformersResponse Builder一起使用。您可以为每个模型创建一个转换器,或者您可以创建一个CamelTransformer并将其注册到每个模型。您可以在转换器中将密钥转换为驼峰式。

  • 创建自定义响应格式。您可以创建camelJson扩展默认 json 格式的响应格式。用逻辑覆盖必要的方法来骆驼式的键。

  • 使用ResponseWasMorphed事件。您可以为该事件创建一个事件处理程序ResponseWasMorphed,并在其中检查并使用您的键。

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

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

于 2016-04-07T06:44:31.397 回答
2

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

于 2017-06-16T02:26:44.577 回答
0

我通过以下方式解决了:

在你的controller班级

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

要求

拉拉维尔 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

于 2020-08-12T00:11:03.620 回答