nepster-web
@nepster-web

Как правильно работать с коллекциями doctrine в symfony2?

Реализую теги на сайте и вот наткнулся на проблему (точнее вопрос), которую хотелось бы уточнить.

Есть ентити Post в котором есть вот такая штука:

public function getTags()
    {
        return $this->tags ?: $this->tags = new ArrayCollection();
    }


Тоесть все теги к посту попадают в коллекцию.

Теперь у меня задача показать теги на сайте, например вот так:

Теги: Вася, Друзья, Семья


Собственно получить коллекцию например в контроллере можно вот так:

foreach ($entity->getTags()->getValues() as $tag) {
            print_r($tag->getName());
        }


в виде этот же код будет выглядеть вот так:
<div class="news-tags">   
                {% if entity.tags.values %}
                    <span class="font-bold" >{{ 'news.post.tags'|trans({}, 'NewsBundle') }}:</span> 
                {% else %}
                    {{ 'news.post.no_tags'|trans({}, 'NewsBundle') }}
                {% endif %}
                <ul class="tags-list">
                    {% if entity.tags.values %}
                        {% for tag in entity.tags.values %}
                            <li><a href="{{ url('news_tag', {'tag':tag.name} )}}">{{ tag.name }}</a></li>
                        {% endfor %}
                    {% endif %}
                </ul>
            </div>


Теперь собственно основная суть моего вопроса, как и где провести какие-либо манипуляции ну в данном случае с коллекциями ?

Ну например заморозить или удалить какой-то тег и отдать все остальные. Или как в примере, расставить запятые везде кроме последнего элемента. Тоесть в yii я бы в модели создал еще 1 метод, который бы привел в порядок данные и вернул обычный массив, который бы я передал в вид через контроллер. Как поступить тут (в симфони)?
  • Вопрос задан
  • 2392 просмотра
Решения вопроса 1
@neolink
во первых лучше так
public function __construct()
{
    $this->tags = new ArrayCollection();
}

во вторых
{% if entity.tags|length %}
   Теги есть!
{% endif %}

{% for tag in entity.tags %}
    {% if not loop.first %}, {%endif %}         
    {% tag.name %}
{% endfor %}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@shoomyst
dumb
Можно в контроллере (плохо), в сервисе (чуть лучше), в entity (как в yii), в твиге (хорошо)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы