php symfony symfony-2.1

php - Establecer el valor predeterminado en el campo Fecha y hora en la forma symfony2



symfony-2.1 (4)

Tengo un formulario que contiene varios campos. Uno de ellos es un campo de fecha y hora. ¿Cómo definir un valor predeterminado para ese campo?

Intenté establecer un valor en la entidad relacionada, en el controlador, en el constructor y __construct:

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

No funciona.

Intenté definir la variable $data en buildForm:

$builder->add(''myDate'', ''date'', array( ''format'' => /IntlDateFormatter::SHORT, ''input'' => ''datetime'', ''widget'' => ''single_text'', ''data'' => new /DateTime("now"));

No funciona tampoco. Alguna idea, comunidad Symfony2?

EDITAR: Agregar entidad a demanda de faost.

/** * @ORM/Column(name="myDate", type="datetime") * @Assert/NotBlank() */ private $myDate;


Esta solución no requiere modificar su objeto de entidad.

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

Esta solución aplica el comportamiento solo a esta forma, no combina este comportamiento con la entidad misma. Puede tener varios formularios que modifiquen una entidad con diferentes comportamientos requeridos. Algunos requieren una fecha predeterminada, otros no.


Establecerlo en el constructor de la entidad:

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


La respuesta de Elnur es correcta y tal vez sea la recomendada. Pero, para completar, una forma alternativa de establecer el valor predeterminado para un widget de fecha en un formulario es especificar la clave de data en el argumento de matriz de opciones con una instancia de DateTime.

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

Nota: Esto sobrescribirá la fecha y hora establecidas previamente en cada edición.


Puede establecer los atributos en la actualización CURRENT_TIMESTAMP y defualt a la marca de tiempo actual actualizará la marca de tiempo actual automáticamente sin actualizar a través de la consulta

`feildname` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP