Symfony FOSUserBundle对用户对象的反序列化抛出;您必须定义一个类型";
基本上,我想将json反序列化到用户对象。像这样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
$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
模型中定义的。