Цикл веток для вложенного комментария в блоге Symfony-Doctrine

1

Я пытаюсь реализовать раздел комментариев в блоге с Symfony и Doctrine, используя шаблоны Twig.

У меня возникли проблемы с попыткой реализовать систему ответов для моих комментариев. Я хотел бы иметь что-то вроде этого:

<div class="comment">
    <p>This is comment number 1</p>
    <div class="response">
        <p>This is a response to comment number 1</p>
        <div class="response">
            <p>This is a response to response just above</p>
        </div>
    </div>
</div>

Поэтому я хотел бы иметь некоторую систему вложенных комментариев.

У меня есть объект Comment с свойством $response с отношением OneToOne с другим объектом Comment:

/**
 * @ORM\OneToOne(targetEntity="Comment")
 */
protected $response;

В моем контроллере я просто получаю свои комментарии следующим образом:

$comments = $this->getDoctrine()
                    ->getManager()
                    ->getRepository('AppBundle:Comment')
                    ->findByArticle($article);

Теперь я пытаюсь создать HTML (Twig), но я не знаю, как цитировать весь комментарий и связанный с ним ответ, чтобы я мог создавать HTML, как я писал чуть выше...

Кто может мне помочь?

Благодарю.

Теги:
twig
doctrine2

1 ответ

6
Лучший ответ

Все, что вам нужно, это повторение. У вас есть несколько вариантов выбора, один из которых использует макрос.

Создайте файл twig с вашим макросом:

{# src/AppBundle/Resources/views/Default/_macro.html.twig #}

{% macro print_comments_recursively(comment) %}
    <div class="response">
        <p>{{ comment }}</p> {# implement __toString on your Comment class or print appropriate property #}
        {% if comment.response is not null  %}
            {{ _self.print_comments_recursively(comment.response) }}
        {% endif %}
    </div>
{% endmacro %}

Импортируйте макрос в свой вид и используйте его:

{% import 'AppBundle:Default:_macro.html.twig' as macros %}
<div class="comment">
    <p>{{ comment }}</p>
    {% if comment.response %}
        {{ macros.print_comments_recursively(comment.response) }}
    {% endif %}
</div>

Здесь у вас есть аналогичная проблема, уже решена, с другими решениями: как визуализировать дерево в Twig

  • 0
    Отличное решение! Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню