Пользовательский фильтр Symfony 2

Я хочу создать собственный фильтр, который рассчитывает разницу между двумя датами.
я следую доктор и создайте источник фильтра:

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), но он не работает. Как я могу это починить? Фильтр зарегистрирован правильно, потому что простое добавление к строковому фильтру работает хорошо.

1

Решение

Если entity является сущностью Doctrine ORM, то, вероятно, у вас уже есть DateTime объекты из него, и вы можете удалить две строки, создающие их экземпляры, что должно решить вашу проблему.

3

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

Вы должны прочитать доктор, особенно этот один. 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;
}
1

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