JMS Serializer DateTime没有反序列化?

时间:2016-06-13 11:26:55

标签: symfony datetime serialization fosrestbundle jmsserializerbundle

我有一种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(小写和下划线),但这会完全破坏表单。

谢谢!

0 个答案:

没有答案