2014-12-26 9 views
4

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

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

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

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

папку хелперы внутри папки сверток было бы неплохо. – teeyo

ответ

1

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

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

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

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

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

{{ game.numDeaths }} 

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

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

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

{{ numDeaths }} 

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

+0

Чтобы уточнить, говоря, что он хранится «неявно», я имею в виду, что вам нужно использовать сущности «Event», хранящиеся в игре, для определения количества смертей (т. Е. Доступа к базе данных снова), а не для хранения числа смертей переменная. И другие ответы указывают на то, что передача репозитория в шаблон является плохой практикой: http://stackoverflow.com/questions/11754077/how-can-i-access-repository-functions-in-twig-template-in-symfony2. – Druckles

+0

Кроме того, если есть несколько статистических данных, которые я хочу представить, это не создало бы большую связь между шаблоном и контроллером? – Druckles

+0

@Druckles [Документация по Symfony2] (http://symfony.com/doc/current/book/templating.html#embedding-controllers) показывает, как передать репозиторий шаблону, поэтому я не думаю, что это плохо практика. –

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) }} 
+0

У меня сложилось впечатление, что такого рода логика не должна быть включены в шаблоны: http://stackoverflow.com/questions/11754077/how-can-i-access-repository-functions-in-twig-template-in-symfony2. – Druckles

+0

При создании пользовательской функции твипа возможно, это кажется ненужным для вашего конкретного примера. –

+0

@Druckles. Где он должен быть включен? Расширение Twig не является шаблоном/представлением. Это лучшее место, где вы должны поставить свою бизнес-логику, которая относится к просмотру. – xurshid29

Смежные вопросы