Я хочу создать собственный фильтр, который рассчитывает разницу между двумя датами.
я следую доктор и создайте источник фильтра:
public function getFilters()
{
return array(
new \Twig_SimpleFilter('auctionLenght', array($this, 'auctionLenght')),
);
}
public function auctionLenght($creDate,$expDate)
{
$datetime1 = new \DateTime($creDate);
$datetime2 = new \DateTime($expDate);
$interval = $datetime1->diff($datetime2);
$data = date('Y-m-D', $interval);
return $data;
}
public function getName()
{
return 'eforma_extension';
}
Теперь я хочу использовать его в шаблоне:
{{entity.creDate |auctionLenght(entity.expDate)}}
Но я все время получаю ошибку:
Во время рендеринга шаблона было сгенерировано исключение («DateTime :: __ construct () ожидает, что параметр 1 будет строкой, объект задан»)
Я пытался передать подсказку типа \ DateTime в публичной функции auctionLenght (\ DateTime $ creDate, \ DateTime $ expDate), но он не работает. Как я могу это починить? Фильтр зарегистрирован правильно, потому что простое добавление к строковому фильтру работает хорошо.
Если entity
является сущностью Doctrine ORM, то, вероятно, у вас уже есть DateTime
объекты из него, и вы можете удалить две строки, создающие их экземпляры, что должно решить вашу проблему.
Вы должны прочитать доктор, особенно этот один. public DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
получает строку (по умолчанию string $time = "now"
) спорить не объект ..
Вы можете отформатировать creDate
а также exprDate
объекты в строку в функции фильтра и передать их в datetime:
пример:
public function auctionLenght($creDate,$expDate)
{
$creString = $creDate->format('Y-m-d H:i:s');
$expString = $expDate->format('Y-m-d H:i:s');
....
return $data;
}