在symfony2窗体中设置date时间字段的默认值
我有一个包含几个字段的表单。 其中之一是date时间字段。 如何定义该字段的默认值?
我已经尝试在控制器中的构造函数和__construct中设置相关实体的值:
$myEntity = new MyEntity(); $myEntity->setMyDate(new \DateTime()); $form = $this->createForm(new AddMyEntity(), $myEntity);
不工作。
试图在buildForm中定义$data
variables:
$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