Я создал строку преобразования данных на сегодняшний день, но я действительно хотел попытаться расширить DateType, так как он имеет всю логику для обработки дат, кто-нибудь делал это раньше или я должен просто использовать DataTransformer (это то, что я реализовали)?
Я пытался сделать следующее:
Class HiddenDateType extends DateType {
public function getParent() {
return HiddenType::class;
}
}
Но это не сработало, когда я посмотрел на класс DateType, он оказался немного сложнее, чем я ожидал, и не знал, где подключиться к возвращаемому типу.
Я нашел несколько решений, но большинство из них были довольно хакерскими, т.е. Скрытие всего поля с помощью CSS или изменение типа внутри шаблона веточки.
Это мой трансформер, это ОЧЕНЬ переопределение, расстраивает то, что внутри DateType есть код RIGHT, но мои навыки отсутствуют: (
class StringToDateTransformer implements DataTransformerInterface
{
/**
* @param \DateTime|null $value
* @return string
*/
public function transform($value)
{
if(null === $value) {
return '';
}
return $value->format('Y-m-d');
}
/**
* @param string $value
* @return \DateTime
*/
public function reverseTransform($value)
{
try {
return new \DateTime($value);
} catch (\Exception $e) {
throw new TransformationFailedException(sprintf(
'Invalid Format for %s format yyyy-mm-dd',
$value
));
}
}
}
На фактической отрендеренной странице есть один div, к которому прикреплено событие javascript daterangepicker
(при нажатии), это событие вызывается при нажатии, что позволяет пользователю выбрать дату начала и окончания.
Затем JavaScript заполнит два скрытых поля DateType (startDate, endDate) внутри формы.
Это div, к которому прикреплен сборщик daterangepicker
.
<div id="selectedRange">
<i class="fa fa-calendar"></i>
<span></span> <i class="fa fa-caret-down"></i>
</div>