【发布时间】:2020-08-01 17:08:40
【问题描述】:
我正在寻找某种“拦截”并在模型中的字段发送回客户端之前对其进行更改。我有一个 API,其端点类似于以下内容:
Route::get('users/{user}', 'Api\UserController@user');
我的应用程序使用vinkla/laravel-hashids,因此就客户端应用程序而言,要查询的ID 应该是K6LJwKJ1M8,而不是1。目前我可以查询提供哈希 ID 的用户,但响应返回的是数字/自动递增 ID。
例如对于/api/users/K6LJwKJ1M8 之类的查询,我收到以下回复:
{
"id": 1,
"address": null,
"telephone": null,
"name": "TestNameHere",
"description": null,
...
}
在 Laravel 中是否有一种很好的方法可以修改响应中返回的所有用户对象以使用 vinkla/laravel-hashids ID,而不是自动递增 ID?
理想情况下,上述响应将变为:
{
"id": K6LJwKJ1M8,
"address": null,
"telephone": null,
"name": "TestNameHere",
"description": null,
...
}
我在想像使用 getRouteKey 这样的东西会起作用,但它不会改变 JSON 响应中发送的对象。
例如
public function getRouteKey() {
return Hashids::encode($this->attributes['id']);
}
如果有一个地方可以更改它会很好,因为我的应用程序有大约 40 条不同的路由,否则我需要“手动”更改(例如,在发送响应之前执行类似 $user->id = Hashids::encode($id) 的操作)
【问题讨论】:
-
例如,您为什么不在 db
hashid中再添加一列,并通过 getRouteKey 方法开箱即用地使用它。对于您关于响应的问题,最好使用 Resource 类,您可以在其中根据需要设置结构。另一种选择是模型中的 toArray() 方法。
标签: php laravel laravel-7 hashids