Symfony 2 Twig | date()不工作?

时间:2013-02-20 20:30:58

标签: symfony twig symfony-2.2

我有一点问题,我真的不知道为什么。我正在使用| date()在twig中打印日期时间变量,但它始终打印实际时间。

用于调试我将以下代码放在我的模板中:

<pre>
{% debug entity.getCreatedAt|date("d.m.Y H:i:s") %}
{% debug entity.getCreatedAt|raw %}
{% debug entity.CreatedAt|raw %}
{% debug entity.CreatedAt|date("d.m.Y H:i:s") %}

My Variable被称为CreatedAt,所以通常我应该使用entity.CreatedAt | date(“d.m.Y H:i:s”)得到正确的输出,对吧?

我的调试输出如下:

string '16.01.2013 13:46:03' (length=19) //entity.getCreatedAt|date("d.m.Y H:i:s")

object(DateTime)[4611] //entity.getCreatedAt|raw
 public 'date' => string '2013-01-16 13:46:03' (length=19)
 public 'timezone_type' => int 3
 public 'timezone' => string 'Europe/Berlin' (length=13)

object(DateTime)[4938] //entity.CreatedAt|raw
 public 'date' => string '2013-02-20 21:46:53' (length=19)
 public 'timezone_type' => int 3
 public 'timezone' => string 'Europe/Berlin' (length=13)

string '20.02.2013 21:46:53' (length=19) //entity.CreatedAt|date("d.m.Y H:i:s")

我不明白为什么一旦我调用CreatedAt它就是NULL。在调试标签的OUTSIDE中,它始终为NULL,不依赖于写入。

在我的实体中,我得到了:

private $CreatedAt;

public function setCreatedAt($createdAt)
{
    $this->CreatedAt = $createdAt;

    return $this;
}

public function getCreatedAt()
{
    return $this->CreatedAt;
}

在YML中我得到了:

CreatedAt:
  type: datetime
  nullable: true

有人看到错误吗?我真的找不到它,也许这是一个bug?

由于

2 个答案:

答案 0 :(得分:4)

如果您想要在实体类之外访问私有变量$CreatedAt,则必须调用 public getter方法getCreatedAt()(即这是为了什么。)

在您的twig模板中,当您调用{% debug entity.CreatedAt|date("d.m.Y H:i:s") %}时,由于entity.CreatedAtNULL,因此返回的字符串基于新的日期对象:

  

如果传递给日期过滤器的值为null,则默认返回当前日期。

http://twig.sensiolabs.org/doc/filters/date.html

<强>更新

如@insertusernamehere所述,twig会自动调用公共getter 但是,只有在{{ }}上使用分隔符{% %}时,才会出现此行为。

http://twig.sensiolabs.org/doc/templates.html#synopsis

答案 1 :(得分:2)

在PHP中,成员函数不区分大小写,类成员区分大小写。因此getCreatedAt的效果与getcreatedat一样好,但CreatedAtcreatedat不同。

以下是一些有关该问题的进一步信息:Why are functions and methods in PHP case-insensitive?