52

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

我尝试在相关实体、控制器、构造函数和 __construct 中设置一个值:

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

不工作。

$data试图在 buildForm中定义变量:

$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;
4

4 回答 4

76

在实体构造函数中设置它:

class Entity
{
    /**
     * @var \DateTime
     */
    private $date;

    public function __construct()
    {
        $this->date = new \DateTime();
    }
}
于 2012-01-03T15:01:12.583 回答
33

Elnur 的答案是正确的,也许是推荐的答案。但为了完整起见,另一种在表单中为日期小部件设置默认值的方法是使用dataDateTime 实例指定选项数组参数中的键。

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

注意:这将覆盖每次编辑之前设置的日期时间。

于 2013-05-27T21:31:05.183 回答
14

此解决方案不需要修改您的实体对象。

    $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;
        }
    ));

此解决方案仅将行为应用于此表单,它不会将此行为耦合到实体本身。您可能有多个表单来修改具有不同所需行为的实体。有些需要默认日期,有些则不需要。

于 2017-08-17T04:05:22.537 回答
-8

您可以将属性设置为 on update CURRENT_TIMESTAMP 并且默认为当前时间戳将自动更新当前时间戳而不通过查询更新

`feildname` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
于 2012-01-03T14:04:46.027 回答