Eloquent 模型属性为驼峰式 [Laravel 5.2] [Dingo API]
Eloquent model attributes as camel case [Laravel 5.2] [Dingo API]
我们的 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
你真的有几个选择。我不会去实施它们(除非需要),但这里有一些我能想到的:
在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 应用程序需要处理驼峰式属性,请将该任务委托给客户端。他们应该在所有请求都通过的系统中。这是客户端在收到响应后必须对其进行转换的正确位置。
我通过以下解决了:
在你的controller
class
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,
],
我们的 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
你真的有几个选择。我不会去实施它们(除非需要),但这里有一些我能想到的:
在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 应用程序需要处理驼峰式属性,请将该任务委托给客户端。他们应该在所有请求都通过的系统中。这是客户端在收到响应后必须对其进行转换的正确位置。
我通过以下解决了:
在你的controller
class
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,
],