Ответ 1
Установите его в конструкторе сущности:
class Entity
{
/**
* @var \DateTime
*/
private $date;
public function __construct()
{
$this->date = new \DateTime();
}
}
У меня есть форма, содержащая несколько полей. Одним из них является поле 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();
}
}
Ответ Elnur правильный и, возможно, рекомендуется. Но для полноты альтернативного способа установить значение по умолчанию для виджета даты в форме - указать ключ 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