我有一点问题,我真的不知道为什么。我正在使用| 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?
由于
答案 0 :(得分:4)
如果您想要在实体类之外访问私有变量$CreatedAt
,则必须调用 public getter方法getCreatedAt()
(即这是为了什么。)
在您的twig模板中,当您调用{% debug entity.CreatedAt|date("d.m.Y H:i:s") %}
时,由于entity.CreatedAt
为NULL
,因此返回的字符串基于新的日期对象:
如果传递给日期过滤器的值为null,则默认返回当前日期。
http://twig.sensiolabs.org/doc/filters/date.html
<强>更新强>
如@insertusernamehere所述,twig会自动调用公共getter
但是,只有在{{ }}
上使用分隔符{% %}
时,才会出现此行为。
答案 1 :(得分:2)
在PHP中,成员函数不区分大小写,类成员区分大小写。因此getCreatedAt
的效果与getcreatedat
一样好,但CreatedAt
与createdat
不同。
以下是一些有关该问题的进一步信息:Why are functions and methods in PHP case-insensitive?。