Yur*_*kin 5 symfony fosuserbundle jmsserializerbundle
在User使用一个附加字段序列化实例时出现问题$name,这会从FOSUserBundle扩展基本用户:
<?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;
}
}
Run Code Online (Sandbox Code Playgroud)
为简化起见,我需要仅$salt使用用户实体公开字段JMSSerializerBundle
#AppBundle\Resources\config\serializer\Model.User.yml
FOS\UserBundle\Model\User:
exclusion_policy: all
properties:
salt:
expose: true
Run Code Online (Sandbox Code Playgroud)
这是配置:
#app\config\config.yml
jms_serializer:
metadata:
auto_detection: true
directories:
FOSUserBundle:
namespace_prefix: "FOS\\UserBundle"
path: "@AppBundle/Resources/config/serializer"
Run Code Online (Sandbox Code Playgroud)
问题是序列化程序还暴露了$name字段,我不想要这个字段,因为我只需$salt暴露:
{
"salt": "abcdefg",
"name": "Admin"
}
Run Code Online (Sandbox Code Playgroud)
我相信我需要告诉序列化器使用配置为我AppBundle\Entity\User而不是FOSUserBundle中的基本用户实体,但我不知道如何实现它.
发生这种情况是因为您在父实体上使用exclusion_policy: all,而不是在子实体上使用,子实体仍然公开其所有属性。
config.yml您应该在jms_seriazlier:directories 下的配置 ( ) 中切换到您的包。
any-name:
namespace_prefix: "My\\FooBundle"
path: "@MyFooBundle/Resources/config/serializer"
Run Code Online (Sandbox Code Playgroud)
现在您可以使用相同的配置来仅公开所需的属性。
#AppBundle\Resources\config\serializer\Entity.User.yml
My\FooBundle\Entity\User:
exclusion_policy: all
properties:
salt:
expose: true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2964 次 |
| 最近记录: |