gpt4 book ai didi

symfony - 如何在 Symfony 2 的序列化器配置中公开相关对象的属性?

转载 作者:行者123 更新时间:2023-12-04 02:15:27 24 4
gpt4 key购买 nike

我在我的网络服务中使用 FOSRestBundle 和 JMSSerializerBundle。这是我的 Action Controller 中的一个函数,它返回一个角色列表。我不知道如何返回此列表中的“parent_id”字段。

<?php

use FOS\RestBundle\Controller\FOSRestController;

class RoleController extends FOSRestController
{
...
/**
* List all roles.
*
* @Annotations\View()
*
* @return array
*/
public function getRolesAction()
{
$roles = $this->repository->findRoles();
$view = $this->view($roles, 200);
return $this->handleView($view);
}
...
}

这是我的角色实体。它具有属性:id、name 和 parent。 parent 是一个角色。

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* Role
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="AppBundle\Entity\RoleRepository")
*/
class Role
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @ORM\ManyToOne(targetEntity="Role")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
*/
private $parent;

/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;

// + getters and setters
...
}

这是我的序列化器配置文件:

AppBundle\Entity\Role:
exclusion_policy: ALL
properties:
id:
expose: true
type: integer
xml_attribute: true
name:
expose: true
type: string

现在 Action Controller 中的 getRolesAction 将输出带有 id 和 name 属性的 JSON。如何将 parent_id 属性添加到序列化器输出?

最佳答案

你可以使用类似的东西:

/**
* @Serializer\VirtualProperty
* @Serializer\Type("integer")
* @Serializer\SerializedName("parent_id")
*
* @return integer
*/
public function getParentId()
{
return $this->parent->getId();
}

我无法告诉您如何以您的配置(可能是 YAML)格式传输注释,但您将能够做到这一点。

重要

这仅适用于序列化 - 所以不要指望此属性稍后会被反序列化!!

备选方案:

如果您只想获得您要求的结果,您可以将此添加到您的属性中:

/** 
* @Accessor(getter="getParentId",setter="setParent") */
* @Serializer\Type("integer")
* @Serializer\SerializedName("parent_id")
*/
private $parent;

还有另一个 setter/getter :

/**
*
* @return integer
*/
public function getParentId()
{
return $this->parent->getId();
}

通过访问器,您可以告诉 JMS 从哪个 getter 获取要序列化的结果,同时仍然能够使用 setter 进行反序列化。

关于symfony - 如何在 Symfony 2 的序列化器配置中公开相关对象的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34347906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com