Установить значение по умолчанию в поле Datetime в форме symfony2 - PullRequest
47 голосов
/ 03 января 2012

У меня есть форма, содержащая несколько полей.Одним из них является поле 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?

РЕДАКТИРОВАТЬ: Добавление сущности по требованию faost.

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

Ответы [ 4 ]

65 голосов
/ 03 января 2012

Установите его в конструкторе сущностей:

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

    public function __construct()
    {
        $this->date = new \DateTime();
    }
}
28 голосов
/ 28 мая 2013

Ответ Эльнура правильный и, возможно, рекомендуемый. Но для полноты, альтернативный способ установить значение по умолчанию для виджета даты в форме - указать ключ data в аргументе массива параметров с экземпляром DateTime.

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

Примечание. При каждом редактировании будет перезаписываться ранее установленное время и дата.

8 голосов
/ 17 августа 2017

Это решение не требует изменения объекта вашей сущности.

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

Это решение применяет поведение только к этой форме, оно не связывает это поведение с самой сущностью. У вас может быть несколько форм, которые изменяют сущность с различным требуемым поведением. Некоторые требуют дату по умолчанию, другие нет.

0 голосов
/ 03 января 2012

Вы можете установить атрибуты на обновление CURRENT_TIMESTAMP и установить значение по умолчанию на текущую отметку времени, чтобы автоматически обновлять текущую отметку времени без обновления с помощью запроса

`feildname` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
...