在symfony2窗体中设置date时间字段的默认值

我有一个包含几个字段的表单。 其中之一是date时间字段。 如何定义该字段的默认值?

我已经尝试在控制器中的构造函数和__construct中设置相关实体​​的值:

$myEntity = new MyEntity(); $myEntity->setMyDate(new \DateTime()); $form = $this->createForm(new AddMyEntity(), $myEntity); 

不工作。

试图在buildForm中定义$datavariables:

 $builder->add('myDate', 'date', array( 'format' => \IntlDateFormatter::SHORT, 'input' => 'datetime', 'widget' => 'single_text', 'data' => new \DateTime("now")); 

不工作。 任何想法,Symfony2社区?

编辑:添加faost的需求的实体。

 /** * @ORM\Column(name="myDate", type="datetime") * @Assert\NotBlank() */ private $myDate; 

将其设置在实体构造函数中:

 class Entity { /** * @var \DateTime */ private $date; public function __construct() { $this->date = new \DateTime(); } } 

Elnur的回答是正确的,也许是推荐的答案。 但是为了完整性,在窗体中为date窗口小部件设置默认值的另一种方法是使用DateTime实例在options array参数中指定data项。

 $builder->add('myDate', 'date', array( 'data' => new \DateTime() )); 

注意:这会覆盖以前设置的每个编辑的date时间。

这个解决scheme不需要修改你的实体对象。

  $builder->add('myDate', DateTimeType::class, [ 'label' => 'My Date', 'required' => false, 'date_widget' => 'single_text', 'time_widget' => 'single_text', 'date_format' => 'dd/MM/yyyy' ]); $builder->get('myDate')->addModelTransformer(new CallbackTransformer( function ($value) { if(!$value) { return new \DateTime('now +1 month'); } return $value; }, function ($value) { return $value; } )); 

此解决scheme将行为应用于此表单,它不会将此行为耦合到实体本身。 您可能有多种forms可以修改具有不同所需行为的实体。 有些需要默认date,有些则不需要。

您可以设置的属性更新CURRENT_TIMESTAMP和defualt当前时间戳会自动更新当前时间戳,而不更新通过查询

 `feildname` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP