Symfony2:如何设置DateTime字段的默认值

4

我使用Symfony 2.8。

我有一张名为"Docentes"的表,其中包含一个DateTime字段 "fechaAlta"。

当我添加新记录时,我需要该字段的默认值为"今天"

我使用指令generate:doctrine:crud生成CRUD。

Symfony在文件"DocentesController.php"中创建了两个函数:"newAction"和"editAction"(以及其他)。两个函数都使用相同的表单,插入到文件夹"Form"下的"DocentesType.php"文件中:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder

        ->add('fechaAlta', 'date')
        ->add('dni')
        #
    ;
}

我尝试了两个解决方案:

第一种:在名为 "Docentes.php" 的实体文件中添加函数:

  public function  __construct()
{
$this->fechaAlta = new \DateTime();    
}

但是当我使用表单添加新记录时,“fechaAlta”字段显示的值是:2011年1月1日。而不是当前日期。

第二个问题:

我编辑了buildForm函数:

->add('fechaAlta', 'date', array(
                'data' => new \DateTime()))
 ##

现在,当我添加一个新的记录时,我再次获得这些值:Day 01,Month 01和Year 2011,但是当我编辑一条记录时,Symfony会更改我的原始值,例如2016-03-25,并设置今天的值!这正好与我所需相反!


当我将:'->add('fechaAlta', 'date', array( 'data' => new \DateTime()))' 更改为 '->add('fechaAlta', 'date', array( 'data' => new \DateTime('now')))' 时,如果是新记录,我会得到今天的日期,但编辑记录时仍然存在问题。 - Jorge H
你是否百分之百确定你的服务器和php.ini上的日期/时间/时区设置是正确的?无论如何,你可以在newAction中调用$entity->setFetchAlta(new \DateTime());吧? - ccKep
2个回答

0

你应该替换成:

public function  __construct()
{
$this->fechaAlta = new \DateTime();    
}

public function  __construct()
{
$this->fechaAlta = new \DateTime('now');    
}

2
该参数肯定是可选的,请参见php文档中的示例#2,第3部分 - ccKep

0

另一个选项:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('fechaAlta', 'date', array(
            'empty_data' => new \DateTime('now'),
        ))
        ->add('dni')
    ;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接