Symfony и Bootstrap dateTimePicker: ожидается строка

Я пытаюсь создать DateTimePickerType, чтобы легко добавить Bootstrap dateTimePicker в поле, просто используя тип «date_time_picker» в построителе форм.
К сожалению, я сталкиваюсь с некоторыми проблемами. В частности, Symfony дает мне эту ошибку:

Symfony \ Component \ Validator \ ConstraintViolation
Object (Symfony \ Component \ Form \ Form) .children [startDate] = Object (DateTime) — 2016-10-16T10: 45: 00 + 0200
Вызванный:
Symfony \ Component \ Form \ Exception \ TransformationFailedException
Невозможно отменить значение для пути свойства «startDate»: ожидается строка.
Вызванный:
Symfony \ Component \ Form \ Exception \ TransformationFailedException
Ожидаемая строка.

Так что, очевидно, моя форма отправляет объект DateTime моему контроллеру, который не может преобразовать его в String. В базе данных поле имеет тип datetime.

Вот мой DateTimePickerType:

class DateTimePickerType extends AbstractType
{
/**
* @return string
*/
public function getParent()
{
return 'datetime';
}

/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{

$resolver->setDefaults(
array(
'empty_data' => new \DateTime(),
'widget' => "single_text",
'attr' => array(
'class' => 'addInput col-xs-12 dateSize noPadding noOutline dateTimePicker',
),
'format' => 'YYYY-MM-DD HH:mm',
'date_format'=>"dd/MM/yyyy hh:mm",
'html5'    => false,
)
);
}

/**
* @param FormView $view
* @param FormInterface $form
* @param array $options
*/
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars = array_replace($view->vars, array(
'empty_data' => $options['empty_data'],
'widget' => $options['widget'],
'format' => $options['date_format'],
));
}

/**
* @return string
*/
public function getName()
{
return 'date_time_picker';
}
}

Я пробовал много разных вариантов для резольвера. Если я удаляю «new \ DateTime ()» в «empty_data», моя форма теперь отправляет null значение, и я получаю хорошую ошибку SQL при попытке вставить ноль в базу данных.

Фрагмент form_template.html.twig :

{% block date_time_picker_widget %}
<div class='input-group date' id='date-time-picker-{{ id }}'>
<input type="text" class="form-control" />
<span class="input-group-addon"><i class="fa fa-clock-o"></i></span>
</div>
{% include 'VMSFormTypeBundle:Template:date_time_picker_script.html.twig' %} {# link to the direct js script to make it datetimepicker #}
{% endblock %}

В date_time_picker_script.html.twig :

{% autoescape false %}
<script type="text/javascript">
$(function () {
$('#date-time-picker-{{ id }}').datetimepicker();
});
</script>
{% endautoescape %}

Фрагмент моего Конструктор форм :

$builder
->add('startDate','date_time_picker')

заранее спасибо

РЕДАКТИРОВАТЬ : Просто заметил, что дата и время, отправленные формой, игнорируют то, что я выбрал, и вместо этого отправляет текущее время (текущий день, час и минуту).

3

Решение

Видимо, это потому, что необходимо преобразовать формат времени между PHP и JS. Я исправил проблему, используя только DateType (время не было необходимым).

Это может быть полезно для тех, кому все еще нужен DateTime, хотя я не проверял его: https://github.com/stephanecollot/DatetimepickerBundle

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector