Где разместить дополнительные вспомогательные функции для сущности

У меня есть сущность, такая как Gameс некоторыми свойствами, такими как timeи имеет нагрузку Event сущности под ним. Некоторая информация об игре неявно хранится в сущностях, например, количество смертей (определяется числом смертельных случаев).

Если я хочу отобразить количество смертей в шаблоне (у которого есть доступ к игровому объекту), куда мне поместить логику?

Я могу придумать несколько вариантов, но я не уверен, что делать «правильно».

  • Поместите функцию getDeaths () в репозиторий
    У меня сложилось впечатление, что это то, что он должен идти, но я не знаю, как получить к нему правильный доступ из шаблона.
  • Поместите функцию getDeaths () в Game юридическое лицо
    Это проще всего сделать, потому что к нему легко получить доступ из шаблона.
  • Создать функцию в контроллере
    Это не кажется гибким, чтобы спросить у контроллера эту информацию

4

Решение

Если вы неявно храните количество смертей в игровой сущности, просто добавьте getDeaths() функция к сущности. В любом случае, вы должны иметь его там, а не хранить открытую переменную, которую можно изменить в любом случае.

Метод Repository понадобился бы, если бы вы запрашивали количество смертей непосредственно из базы данных, и в этом случае вы могли бы просто передать это непосредственно в шаблон.

Имейте в виду, что вы можете передать любое количество переменных в шаблон, так что это не должно быть просто

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

а затем в вашем шаблоне:

{{ game.numDeaths }}

Вы также можете легко передать количество смертей в свой шаблон, чтобы он был легко доступен:

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

а затем в вашем шаблоне:

{{ numDeaths }}

Надеюсь, это поможет.

1

Другие решения

Использовать пользовательское расширение / функции ветки:

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

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

return $return;
}

использование:

{{ number_of_death(entity) }}
1

По вопросам рекламы [email protected]