В моей форме у меня есть fieldset, который имеет элемент даты:
$this->add([
'name' => 'dob',
'type' => 'date',
'attributes' => [
'id' => 'dob',
'class' => 'form-control',
],
'options' => [
'label' => 'Date of Birth?',
],
]);
со следующей спецификацией входного фильтра:
[
'name' => 'dob',
'filters' => [
[
'name' => 'date_time_formatter',
'options' => [
'format' => 'Y-M-d h:i:s.000',
],
]
],
],
Когда я добавляю запись (данные формы пустые), в интерфейсе я получаю поле даты с раскрывающимся календарем, который заполняется в зависимости от моей локали (дд / мм / гггг). Это нормально — проходит через мой фильтр, когда я отправляю форму, формат даты изменяется и без проблем помещается в мою базу данных.
Когда я редактирую запись (данные формы = ['dob' => '1972-15-07 12:00:00.000']
), на передней панели календарь пуст, а на консоли есть сообщение:
> The specified value "1972-15-07 12:00:00.000" does not conform to the required format, "yyyy-MM-dd".
Я использую один и тот же скрипт представления для нескольких форм, поэтому я делаю только <?php echo $this->form($this->form);?>
— то есть я не могу <?php echo $this->formRow($this->form->get('dob')->dosomething());?>
Как я могу $form->setData($data);
dob
поле с использованием необработанного значения в БД и заполнить его в другом формате? (идеальное решение будет ограничено манипулированием только элементом или набором полей, а не формой или контроллером).
Вы можете преобразовать свою дату в формат, принятый вашим плагином календаря:
$date = date('d/m/Y', strtotime($date));
Других решений пока нет …