我有一种Symfony2,FOSRestBundle和JMSSerializerBundle的特殊设置,因为后台有一个遗留数据库。我正努力让PUT请求正常工作,包括对DateTime属性进行反序列化。
首先要做的事情。这是一个模型代码段,请注意DateTime
格式:
/**
* @var \DateTime
*
* @ORM\Column(name="sys_lastmodifieddate", type="datetime", nullable=true)
*
* @Type("DateTime<'Y-m-d\TH:i:sP'>")
*
* @Expose
*/
private $sysLastmodifieddate;
我构建了一个Form\Type
来支持持久传入的实体:
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('officialname')
->add('shortname')
->add('shortinfo')
->add('web')
->add('fk_clientsector')
->add($builder->create('sys_lastmodifieddate')->addViewTransformer(new DateTimeToStringTransformer()));
}
控制器操作如下所示:
public function putClientAction(Request $request, $id )
{
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('AcmeBundle:Client')->find($id);
$form = $this->get('form.factory')->createNamed('', new \AcmeBundle\ClientType(), $entity);
$form->submit($request);
$em->persist($entity);
$em->flush();
return $this->get('fos_rest.view_handler')->handle($this->view(null, Codes::HTTP_OK));
}
现在,我的问题是通过JSON进入的任何字段的更新都将被执行,但是DateTime
字段。
通过PUT路线提交的示例请求:
{
"shortname":"some client",
"officialname":"some client",
"sys_lastmodifieddate":"2016-06-13T11:20:49+01:00",
"fk_clientsector":"5"
}
从日志中得到更新声明:
UPDATE crm_client SET shortname = ?, officialname = ?, fk_clientsector = ? WHERE id = ? ["some client", "some client", "5", 12345]
任何地方都没有日期的迹象。有任何暗示为什么会发生这种情况,我做错了什么?很乐意提供任何要求的信息。
注意:我已经尝试命名Model属性$sys_lastmodifieddate
(小写和下划线),但这会完全破坏表单。
谢谢!