У меня есть форма, содержащая несколько полей. Одним из них является поле Datetime. Как определить значение по умолчанию для этого поля?
Я попытался установить значение для связанного объекта, в контроллере, в конструкторе и __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?
EDIT: добавление объекта по требованию.
/** * @ORM\Column(name="myDate", type="datetime") * @Assert\NotBlank() */ private $myDate;
Задайте его в конструкторе сущности:
class Entity { /** * @var \DateTime */ private $date; public function __construct() { $this->date = new \DateTime(); } }
Ответ Элнура правильный и, пожалуй, рекомендуется. Но для полноты альтернативного способа установить значение по умолчанию для виджета даты в форме – указать ключ data
в аргументе массива параметров с экземпляром DateTime.
$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; } ));
Это решение применяет поведение только к этой форме, оно не связывает это поведение с самим объектом. У вас может быть несколько форм, которые изменяют объект с различным требуемым поведением. Некоторым требуется дата по умолчанию, другие – нет.
Вы можете установить атрибуты на обновление CURRENT_TIMESTAMP, а defualt на текущую метку времени автоматически обновит текущую метку времени без обновления с помощью запроса
`feildname` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP