Symfony FOSUserBundle对用户对象的反序列化抛出;您必须定义一个类型";

Symfony FOSUserBundle对用户对象的反序列化抛出;您必须定义一个类型";,symfony,fosuserbundle,jmsserializerbundle,symfony-2.3,Symfony,Fosuserbundle,Jmsserializerbundle,Symfony 2.3,基本上,我想将json反序列化到用户对象。像这样 $serializer = $this->get('jms_serializer'); $data = $serializer->deserialize($this->get('request')->getContent(), 'My\FooBundle\Entity\User', 'json'); 传递给反序列化程序的请求数据: {"id":2,"us

基本上,我想将json反序列化到用户对象。像这样

$serializer = $this->get('jms_serializer');

$data = $serializer->deserialize($this->get('request')->getContent(),
                                 'My\FooBundle\Entity\User', 'json');
传递给反序列化程序的请求数据:

{"id":2,"username":"...@gmail.com","username_canonical":"...@gmail.com", ... }
抛出错误:

request.CRITICAL:未捕获的PHP异常 JMS\Serializer\Exception\RuntimeException:“您必须为 FOS\UserBundle\Model\User::$username.“在 …\vendor\jms\serializer\src\jms\serializer\GenericDeserializationVisitor.php 第170行[][]


我使用SF2.3。fos用户类的反序列化是否需要进行任何设置?你知道我为什么会收到这条消息以及如何修复它吗?

你好,我今天遇到了同样的问题,最终找到了如何处理这个非问题的方法

对于要反序列化的对象中的每个属性,bundle希望知道在转换后您希望拥有的类型。 因此,必须在实体类中使用捆绑包提供的注释\类型,并注释每个属性:

小心:粘贴是邪恶的!参考示例中的use语句是
use-JMS\Serializer\Annotation\Type
但是应该是序列化程序的实际路径
使用JMS\SerializerBundle\Annotation\Type

我的代码中的一个示例:

    use JMS\SerializerBundle\Annotation\Type;
    /**
    * @ORM\Entity
    * @ORM\Table(name="ecro_form")
    */
     class Form {

     /**
     * @ORM\ManyToOne(targetEntity="eCRO\Bundle\UserBundle\Entity\User", inversedBy="forms")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     * @Type("eCRO\Bundle\UserBundle\Entity\User")
     */
     protected $user; // inherits from FOSUser
在FOSUser抽象类(位置:vendor\FOS\UserBundle\Model\User.php)上使用注释,以便序列化程序知道如何进行工作

希望这会有帮助

你应该看一看。我对FOSUserBundle也有同样的问题,因为这些字段不是在
My\Foo\Entity\User
模型中定义的,而是在
FOS\UserBundle\model\User
模型中定义的。