Не удается отправить всего пользователя в ответ API json, только отправить идентификатор и адрес электронной почты

#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, и это сработало. Можете ли вы сказать мне, почему не в этом?