首页 > 解决方案 > 无法将整个用户发送到 API json 响应,只能发送 id 和电子邮件

问题描述

我正在尝试将我的用户实体发送回前端,但只发送 id 和电子邮件,而不发送其他属性。其他属性正在使用@Groups,例如 id 和电子邮件。如您所见,我无法发送回复 ID 和电子邮件。所以我不明白问题出在哪里。我有use Symfony\Component\Serializer\Annotation\Groups;

我的实体用户:

/**
 * @ORM\Table(name="`user`")
 * @ORM\Entity(repositoryClass=UserRepository::class)
 */
class User implements UserInterface, \Serializable
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @Groups("apiv0")
     */
    private $id;

    
    /**
     * @ORM\Column(type="json")
     * @Groups("apiv0")
     */
    private $roles = [];
    
    /**
     * @ORM\Column(type="string", length=180, unique=true)
     * @Groups("apiv0")
     */
    private $email;
    /**
     * @var string The hashed password
     * @ORM\Column(type="string")
     * @Groups("apiv0")
     */
    private $password;

    /**
     * @ORM\OneToMany(targetEntity=Bloodsugar::class, mappedBy="user")
     * @Groups("apiv0")
     */
    private $bloodsugars;

    /**
     * @ORM\Column(type="string", length=50)
     * @Groups("apiv0")
     */
    private $lastname;

    /**
     * @ORM\Column(type="string", length=50)
     * @Groups("apiv0")
     */
    private $firstname;

    /**
     * @ORM\Column(type="float")
     * @Groups("apiv0")
     */
    private $target_min;

    /**
     * @ORM\Column(type="float")
     * @Groups("apiv0")
     */
    private $target_max;

    /**
     * @ORM\Column(type="string", length=50, nullable=true)
     * @Groups("apiv0")
     */
    private $doctor_name;

    /**
     * @ORM\Column(type="string", length=20)
     * @Groups("apiv0")
     */
    private $diabetes_type;

    /**
     * @ORM\Column(type="string", length=50, nullable=true)
     * @Groups("apiv0")
     */
    private $doctor_email;

    /**
     * @ORM\Column(type="datetime")
     * @Groups("apiv0")
     */
    private $created_at;

    /**
     * @ORM\Column(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

我的转储:

在此处输入图像描述

标签: jsonapisymfony

解决方案


您应该在组定义中使用方括号,所以这样做:

/**
 * @ORM\Column(type="string", length=180, unique=true)
 * @Groups({"apiv0"})
 */
private $email;

而不是这个:

/**
 * @ORM\Column(type="string", length=180, unique=true)
 * @Groups("apiv0")
 */
private $email;

推荐阅读