У меня проблема с ответом JSON моего API.Я использовал ресурс, так как я хотел ограничить, какие данные отправлять обратно клиенту.Раньше он правильно давал мой предполагаемый ответ, но когда я снова открыл свой проект, ответ изменился.
Вот части моего кода:
api.php
Route::get('admin/adminuserdetails/{adminUser}', 'AdminsController@AdminUserDetails');
Пример URL: http://localhost:8000/api/admin/adminuserdetails/1
Контроллер
public function AdminUserDetails(AdminUsers $adminUser){
return response()->json(new AdminUserAccessDetails($adminUser), 200);
}
Модель AdminUsers
class AdminUsers extends Model
{
//
protected $table = 'AdminUsers';
protected $primaryKey = 'AdminUserId';
protected $guarded = [];
}
Ресурс AdminUserAccessDetails
class AdminUserAccessDetails extends JsonResource
{
public function toArray($request)
{
//return parent::toArray($request);
return [
'adminUserId' => $this->AdminUserId,
'adminFirstName' => $this->AdminFirstName,
'adminLastName' => $this->AdminLastName,
'modulesAllowed' => $this->ModulesAllowed,
'actionsAllowed' => $this->ActionsAllowed
];
}
}
Образец ответа (раньше мой предполагаемый ответ)
{
"adminUserId": 1,
"adminFirstName": "asdfasdf",
"adminLastName": "asdfsadf",
"modulesAllowed": "",
"actionsAllowed": ""
}
Образец ответа (сейчас)
{
{
"resource": {
"adminUserId": 1,
"adminFirstName": "asdfasdf",
"adminLastName": "asdfsadf",
"adminEmail": "asdfsadf@fsafsa.com",
"adminPassword": "l6wfDtAaYAp6aM04TU++9A==",
"authToken": "68bbc9fc7eb08c9f6d96f6b63d30f056",
"fCMToken": null,
"profileImage": "https://www.gravatar.com/avatar/5d0d65256e8c2b15a8d00e8b208565f1?d=identicon&s=512",
"userTypeId": "0",
"status": "A",
"createDate": "2018-06-26 16:01:43.947",
"updateDate": "2018-06-26 16:01:44.143",
"modulesAllowed": "",
"actionsAllowed": ""
},
"with": [],
"additional": []
}
Iничего не изменилось, но когда я протестировал это снова (не только на этом конкретном маршруте), все, что использует какой-либо ресурс, теперь заключено в оболочку этого ресурса, и я не могу найти причину.
Я пытался реализовать ту же логику с другим чистым проектом, и он отлично работает.
Что является причиной этого и как я могу получить обратно мой намеченный ответ?
Редактировать 1: Я попытался изменить свой возврат, я удалил код «response () -> json ()», чтобы мой контроллер выглядел так:
public function AdminUserDetails(AdminUsers $adminUser){
//return response()->json(new AdminUserAccessDetails($adminUser), 200);
return new AdminUserAccessDetails($adminUser);
}
Ответ этого редактирования теперь немногоближе к моему предполагаемому выводу:
{
"data": {
"adminUserId": 1,
"adminFirstName": "asdfasdf",
"adminLastName": "asdfsadf",
"modulesAllowed": "",
"actionsAllowed": ""
}
}
Однако я все еще предпочитаю использовать response () -> json (), чтобы я мог вернуть правильный код ответа HTTP ..