symfony从json数据中持久化datetime

str*_*trz 3 php datetime json symfony

你好,我把数据作为JSON格式,在我的服务器网站上,我必须通过Doctrine存储它们.一切都很顺利,但当我收到日期时间格式数据时,我有验证错误.我在控制器中的分离动作上测试这种情况:

public function indexAction($name)
{

    $em = $this->getDoctrine()->getManager();

    $test = new Test();
    $test->setName("Test");
    //$test->setStart(new \DateTime());
    $form = $this->createForm(new TestType(), $test);

    $store = array(
        "name" => "Test",
        "start" => new \DateTime()//will be something like *2014-04-09 11:11:11'
    );

    $form->submit($store);

    if ($form->isValid()) {
        $em->persist($test);
        $em->flush();
    } else var_dump($this->getErrorMessages($form));


    return $this->render('CodeTestBundle:Default:index.html.twig', array('name' => $name));
}
Run Code Online (Sandbox Code Playgroud)

var dump是:

array(size = 1)'start'=> array(size = 3)0 => string'此值无效.' (长度= 24)

  'date' => 
    array (size=3)
      'year' => 
        array (size=0)
          ...
      'month' => 
        array (size=0)
          ...
      'day' => 
        array (size=0)
          ...
  'time' => 
    array (size=2)
      'hour' => 
        array (size=0)
          ...
      'minute' => 
        array (size=0)
          ...
Run Code Online (Sandbox Code Playgroud)

cfo*_*cfo 5

您的问题是表单框架期望视图数据由每个日期和时间组件的一个窗口小部件处理,因为日期时间字段类型的默认窗口小部件设置是choice.

如果将datetime字段配置为单个文本输入,则验证器将接收一个字符串而不是数组结构,并按预期处理它而不进行任何其他转换.在您的情况下,字段配置如下所示:

$builder->add('start', 'datetime', array(
    'widget' => 'single_text',
    'input' => 'datetime'
));
Run Code Online (Sandbox Code Playgroud)