我有一个包含几个字段的表单。其中之一是Datetime字段。如何为该字段定义默认值?
我已经尝试在相关实体上设置一个值,在控制器,在构造函数和__construct:
$myEntity = new MyEntity();
$myEntity->setMyDate(new 'DateTime());
$form = $this->createForm(new AddMyEntity(), $myEntity);
不工作。
尝试在buildForm:
中定义$data
变量$builder->add('myDate', 'date', array(
'format' => 'IntlDateFormatter::SHORT,
'input' => 'datetime',
'widget' => 'single_text',
'data' => new 'DateTime("now"));
也不工作。Symfony2社区有什么想法吗?
编辑:根据主机的要求添加实体。
/**
* @ORM'Column(name="myDate", type="datetime")
* @Assert'NotBlank()
*/
private $myDate;
在实体构造函数中设置:
class Entity
{
/**
* @var 'DateTime
*/
private $date;
public function __construct()
{
$this->date = new 'DateTime();
}
}
Elnur的答案是正确的,也许是值得推荐的答案。但是为了完整起见,在表单中为日期小部件设置默认值的另一种方法是使用DateTime实例在options数组参数中指定data
键。
$builder->add('myDate', 'date', array(
'data' => new 'DateTime()
));
注意:这将覆盖之前设置的每次编辑日期时间
这个解决方案不需要修改你的实体对象。
$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;
}
));
此解决方案仅将此行为应用于此表单,它不会将此行为耦合到实体本身。您可能有几个表单来修改具有不同所需行为的实体。有些需要默认日期,有些则不需要。
您可以将属性设置为on update CURRENT_TIMESTAMP,默认为current time stamp将自动更新当前时间戳,而无需通过查询更新
`feildname` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP