#json #api #symfony
#json #API #symfony
Вопрос:
Я пытаюсь отправить обратно на интерфейс мою пользовательскую сущность, но отправляются только идентификатор и адрес электронной почты, а не другие права. Другие свойства используют @Groups, такие как id и email. Как вы увидите, я не могу отправить идентификатор ответа и адрес электронной почты. Так что я не понимаю, в чем проблема. У меня есть use SymfonyComponentSerializerAnnotationGroups;
Мой пользователь сущности:
/**
* @ORMTable(name="`user`")
* @ORMEntity(repositoryClass=UserRepository::class)
*/
class User implements UserInterface, Serializable
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
* @Groups("apiv0")
*/
private $id;
/**
* @ORMColumn(type="json")
* @Groups("apiv0")
*/
private $roles = [];
/**
* @ORMColumn(type="string", length=180, unique=true)
* @Groups("apiv0")
*/
private $email;
/**
* @var string The hashed password
* @ORMColumn(type="string")
* @Groups("apiv0")
*/
private $password;
/**
* @ORMOneToMany(targetEntity=Bloodsugar::class, mappedBy="user")
* @Groups("apiv0")
*/
private $bloodsugars;
/**
* @ORMColumn(type="string", length=50)
* @Groups("apiv0")
*/
private $lastname;
/**
* @ORMColumn(type="string", length=50)
* @Groups("apiv0")
*/
private $firstname;
/**
* @ORMColumn(type="float")
* @Groups("apiv0")
*/
private $target_min;
/**
* @ORMColumn(type="float")
* @Groups("apiv0")
*/
private $target_max;
/**
* @ORMColumn(type="string", length=50, nullable=true)
* @Groups("apiv0")
*/
private $doctor_name;
/**
* @ORMColumn(type="string", length=20)
* @Groups("apiv0")
*/
private $diabetes_type;
/**
* @ORMColumn(type="string", length=50, nullable=true)
* @Groups("apiv0")
*/
private $doctor_email;
/**
* @ORMColumn(type="datetime")
* @Groups("apiv0")
*/
private $created_at;
/**
* @ORMColumn(type="string", length=255)
* @Groups("apiv0")
*/
private $username;
Мой контроллер:
$userCreated = $repository->find($user->getId());
dump($user);
dump($userCreated);
$response = $this->json($userCreated, 200, [], ['groups' => 'apiv0']);
dd($response);
return $response
Мои дампы:
Комментарии:
1. …. есть ли веская причина для ввода пароля в ответ API?
Ответ №1:
Вы должны использовать графическую скобку в определении групп, поэтому делайте так:
/**
* @ORMColumn(type="string", length=180, unique=true)
* @Groups({"apiv0"})
*/
private $email;
вместо этого:
/**
* @ORMColumn(type="string", length=180, unique=true)
* @Groups("apiv0")
*/
private $email;
Комментарии:
1. Фантастика, это работает так хорошо, большое вам спасибо. Я использовал without {} в моем проекте precedent, и это сработало. Можете ли вы сказать мне, почему не в этом?