1

我有一个小问题,我真的不知道为什么。我正在使用 |date() 在树枝中打印日期时间变量,但它总是打印实际时间。

对于调试,我将以下代码放入我的模板中:

<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") %}

我的变量被称为 CreatedAt,所以通常我应该使用 entity.CreatedAt|date("dmY 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。并且在调试标记之外它始终为 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吧?

谢谢

4

2 回答 2

4

如果您想在实体类之外访问私有变量$CreatedAt,则必须调用公共getter 方法getCreatedAt()(这就是它的用途)。

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

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

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

更新:

正如@insertusernamehere 所提到的,twig 会自动调用公共 getter。
但是这种行为似乎只有在使用分隔符时才会{{ }}发生{% %}

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

于 2013-02-20T20:37:44.313 回答
2

在 PHP 中,成员函数不区分大小写,类成员区分大小写。所以getCreatedAt将与. getcreatedat_CreatedAtcreatedat

这里有一些关于它的进一步信息:为什么 PHP 中的函数和方法不区分大小写?.

于 2013-02-20T20:41:14.003 回答