Symfony 2自定义过滤器

时间:2014-09-28 21:32:17

标签: php symfony datetime

我想创建自定义过滤器来计算两个日期之间的差异。 我按照doc创建过滤源:

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为字符串,对象给定")

我试图在公共函数auctionLenght(\ DateTime $ creDate,\ DateTime $ expDate)中传递\ DateTime type-hint但它无效。我该怎么修呢?过滤器已正确注册,因为简单的添加到字符串过滤器运行良好。

2 个答案:

答案 0 :(得分:3)

如果entity是一个Doctrine ORM实体,那么你可能已经有了DateTime个对象,你可以删除实例化它们的两行,这可以解决你的问题。

答案 1 :(得分:1)

您应该阅读doc,尤其是thispublic DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )收到一个字符串(默认为string $time = "now")arguemtn而不是对象..

您可以将creDateexprDate对象格式化为过滤器函数中的字符串,并将它们传递给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;
}