gpt4 book ai didi

symfony - FOSUserBundle + JMSSerializerBundle + 公开额外字段

转载 作者:行者123 更新时间:2023-12-02 10:17:42 26 4
gpt4 key购买 nike

在使用一个附加字段 $name 序列化 User 实例时遇到问题,该字段从 FOSUserBundle 扩展了基本 User:

<?php
namespace AppBundle\Entity\User;

use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;

/**
* User
*/
class User extends BaseUser
{
/**
* @var string
*/
private $name;

/**
* Set name
* @param string $name
* @return User
*/
public function setName($name)
{
$this->name = $name;

return $this;
}

/**
* Get name
* @return string
*/
public function getName()
{
return $this->name;
}
}

为了简化,我只需要使用 JMSSerializerBundle 从用户实体公开 $salt 字段

#AppBundle\Resources\config\serializer\Model.User.yml
FOS\UserBundle\Model\User:
exclusion_policy: all
properties:
salt:
expose: true

这是它的配置:

#app\config\config.yml
jms_serializer:
metadata:
auto_detection: true
directories:
FOSUserBundle:
namespace_prefix: "FOS\\UserBundle"
path: "@AppBundle/Resources/config/serializer"

问题是,序列化程序还公开 $name 字段,我不想要该字段,因为我只需要 $salt暴露:

{
"salt": "abcdefg",
"name": "Admin"
}

我相信我需要告诉序列化器使用我的 AppBundle\Entity\User 的配置,而不是 FOSUserBundle 中的基本用户实体,但我不知道如何实现它。

最佳答案

这就是我解决问题的方法。我有一个 User.php 类从 FOS\UserBundle\Model\User 继承为 BaseUser。我需要控制 BaseUser 类和 User 类的序列化。

解决方案:您需要2个独立的配置文件来控制每个类。

config.yml

#Serializer configuration
jms_serializer:
metadata:
directories:
AppBundle:
path: "@AppBundle/Resources/config/serializer"
FOSUB:
namespace_prefix: "FOS\\UserBundle"
path: "%kernel.root_dir%/serializer/FOSUB"

Model.User.yml

FOS\UserBundle\Model\User:
exclusion_policy: ALL
properties:
id:
expose: true
username:
expose: true
email:
expose: true
enabled:
expose: true

Entity.User.yml

AppBundle\Entity\User:
exclusion_policy: ALL
properties:
imageAvatar:
expose: true
updatedAt:
expose: true



namespace AppBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;



/**
* User
*
* @ORM\Table(name="usuario")
* @ORM\Entity(repositoryClass="DietaBundle\Repository\UserRepository")
*
*
*/
class User extends BaseUser
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;


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



/**
* @ORM\Column(type="datetime")
*
* @var \DateTime
*/
private $updatedAt;

Clear the cache after each change in the configuration files.

缓存:清除

关于symfony - FOSUserBundle + JMSSerializerBundle + 公开额外字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402421/

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