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用户类?知道为什么我收到这条消息以及如何修复它?
您好我今天遇到了同样的问题,最后找到了如何处理这个非问题,
对于要反序列化的对象中的每个属性,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),以便序列化程序知道如何完成其工作.
希望它会有所帮助!
| 归档时间: |
|
| 查看次数: |
5657 次 |
| 最近记录: |