Set default value on Datetime field in symfony2 form Set default value on Datetime field in symfony2 form symfony symfony

Set default value on Datetime field in symfony2 form


Set it in the entity constructor:

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


Elnur's answer is correct and is perhaps the recommended one. But for completeness, an alternative way to set the default value for a date widget in a form is to specify the data key in the options array argument with an instance of DateTime.

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

Note: This will overwrite the previously set datetime on every edit.


This solution doesn't require modifying your entity object.

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

This solution applies the behaviour to just this form, it does not couple this behaviour to the entity itself. You might have several forms that modify an entity with different required behaviours. Some require a default date, others don't.