在哪里为实体添加额外的辅助函数

时间:2014-12-26 17:59:54

标签: php symfony twig code-organization

我有一个实体,例如Game,有一些属性,例如time,并且它下面有一些Event个实体。关于游戏的一些信息隐含地存储在实体中,例如,死亡人数(由死亡事件数量给出)。

如果我想在模板中显示死亡人数(可以访问游戏对象),我在哪里放逻辑?

我可以想到几个选项,但我不确定哪个是正确的'要做的事。

  • 将getDeaths()函数放入存储库中 我觉得它应该去的地方,但我不知道如何从模板中正确访问它。
  • Game实体中添加getDeaths()函数 最容易做的事情,因为它可以从模板中轻松访问。
  • 在控制器中创建功能
    向控制器询问此信息似乎并不灵活

2 个答案:

答案 0 :(得分:1)

如果您在游戏实体中隐式存储死亡人数,则只需向实体添加getDeaths()函数即可。你应该在那里拥有它,而不仅仅是保留一个可以修改的公共变量。

如果您必须直接从数据库中查询死亡人数,则需要存储库方法,在这种情况下,您可以直接将其传递给模板。

请注意,您可以将任意数量的变量传递到模板,因此不必只是

return array('game' => $game);

然后在你的模板中:

{{ game.numDeaths }}

您可以直接将死亡人数直接传递给您的模板,以便轻松访问:

return array('game' => $game, 'numDeaths' => $numDeaths);

然后在你的模板中:

{{ numDeaths }}

希望有所帮助。

答案 1 :(得分:1)

使用twig自定义扩展/功能:

public function getFunctions()
{
    return [
        new \Twig_SimpleFunction('number_of_death', [$this, 'getNumberOfDeath'])
    ]
}

public function getNumberOfDeath(Entity $entity)
{
    // logic

    return $return;
}

用法:

{{ number_of_death(entity) }}
相关问题