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

Upv*_*ote 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');
Run Code Online (Sandbox Code Playgroud)

请求数据传递给反序列化器:

{"id":2,"username":"...@gmail.com","username_canonical":"...@gmail.com", ... }
Run Code Online (Sandbox Code Playgroud)

抛出的错误:

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

我用的是sf 2.3.是否有任何必须设置用于反序列化fos用户类?知道为什么我收到这条消息以及如何修复它?

hdc*_*cos 8

您好我今天遇到了同样的问题,最后找到了如何处理这个非问题,

对于要反序列化的对象中的每个属性,bundle想知道转换后您希望使用哪种类型.因此,您必须使用Entity类中包提供的注释\类型并对每个属性进行处理:http://jmsyst.com/libs/serializer/master/reference/annotations#type

小心:粘贴是邪恶的!参考示例中的use语句use JMS\Serializer\Annotation\Type;应该是序列化程序的真实路径use 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
Run Code Online (Sandbox Code Playgroud)

在FOSUser抽象类上使用注释(位置:vendor\FOS\UserBundle\Model\User.php),以便序列化程序知道如何完成其​​工作.

希望它会有所帮助!