Я ищу своего рода «перехват» и изменение поля в модели, прежде чем оно будет отправлено обратно клиенту. У меня есть API с конечными точками, подобными следующему:
Route::get('users/{user}', 'Api\UserController@user');
Мое приложение использует vinkla / laravel -hashids , поэтому, что касается клиентского приложения, идентификатор для запрос должен иметь вид K6LJwKJ1M8
, а не 1
. В настоящее время я могу запросить пользователя, предоставившего ha sh -id, но ответ возвращается с числовым / автоматически увеличивающимся идентификатором.
например. Для такого запроса, как /api/users/K6LJwKJ1M8
, я получаю следующий ответ :
{
"id": 1,
"address": null,
"telephone": null,
"name": "TestNameHere",
"description": null,
...
}
Есть ли хороший способ в Laravel, что я мог бы изменить все пользовательские объекты, возвращаемые в ответах, чтобы использовать идентификатор vinkla / laravel -hashids вместо автоматически увеличивающегося идентификатора?
В идеале ответ должен выглядеть так:
{
"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)
)