Oto moja jednostka wiadomości. Jest to klasa, która definiuje wiadomości między użytkownikami w mojej aplikacji.Wyświetlanie macierzy zagnieżdżonej w gałązce
class Message
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
* @Assert\NotBlank(message="private_message.title.blank")
* @ORM\Column(name="title", type="string", length=50)
*/
protected $title;
/**
* @Assert\NotBlank(message="private_message.receiver.blank")
* @ORM\ManyToOne(targetEntity="MedAppBundle\Entity\User")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $receiver;
/**
* @ORM\ManyToOne(targetEntity="MedAppBundle\Entity\User")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $sender;
/**
* @var string
* @Assert\NotBlank(message="private_message.content.blank")
* @ORM\Column(name="content", type="string")
*/
protected $content;
/**
* @var \DateTime
*
* @ORM\Column(name="sentAt", type="datetime")
*/
protected $sentAt;
/**
* @var boolean
*
* @ORM\Column(name="isSpam", type="boolean")
*/
protected $isSpam = false;
/**
* @var \DateTime
*
* @ORM\Column(name="seenAt", type="datetime",nullable=true)
*/
protected $seenAt = null;
/**
* @ORM\ManyToOne(targetEntity="PrivateMessageBundle\Entity\Message")
* @ORM\JoinColumn(referencedColumnName="id",nullable=true)
*/
protected $replyof;
/**
* @ORM\OneToMany(targetEntity="PrivateMessageBundle\Entity\Message", mappedBy="replyof")
**/
private $replies;
public function __construct() {
$this->replies = new ArrayCollection();
}
Co ważne jest, aby pamiętać, jest zmienna replyof
, który mówi to, co wiadomość jest dominująca w komunikacie. Jeśli jest to wartość NULL, wiadomość nie jest odpowiedzią, jest to wiadomość nadrzędna (root).
I zmienna messages
, która jest tablicą wiadomości, które są odpowiedziami na wiadomość. Te odpowiedzi mogą same odpowiadać. Ta tablica może mieć także wartość NULL dla węzłów liści, ponieważ nie mają żadnej odpowiedzi.
Wszystkie pozostałe zmienne zawierają tylko niektóre pola definiujące rzeczywistą wiadomość między dwoma użytkownikami.
Co staram się zrobić, to wyświetlacz w Gałązka wszystkich moich wiadomości w formacie drzewiastych, tak:
message1 - root message, reply of none, but has replies
reply1 - first reply of message 1
reply1 first reply of reply 1 of message 1, leaf with no further replies
reply2 - second reply of message 1, leaf with no further replies
message2 - root message, no replies and a reply of none
Problemem jest to, że obsługuje tylko foreach
Gałązka pętle i nie jestem pewien, jak wyświetla ten format, gdy ma większą głębokość, większą niż dwa.
{% for reply in message.replies %}
<li> sent by: {{ reply.sender }} </li>
<li> title: {{ reply.title }} </li>
<li> content: {{ reply.content }} </li>
<li> date: {{ reply.sentAt|date('d-m-Y H:i:s') }} </li>
<hr>
{% endfor %}
Spowoduje wyświetlenie każdej odpowiedzi na wiadomość, ale jak wyświetlić zagnieżdżone wiadomości na całej głębokości?
Czy widziałeś [Twig - Jak renderować drzewo] (http://stackoverflow.com/questions/8326482/twig-how-to-render-a-tree)? – HPierce