Ecco la mia entità di messaggio. È una classe che definisce i messaggi tra gli utenti nella mia app.Visualizzazione dell'array nidificato nel ramoscello
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();
}
cosa importante da notare è la variabile replyof
, che racconta quale messaggio è un genitore del messaggio. Se è NULL, il messaggio non è una risposta, è un messaggio principale (una radice).
E la variabile messages
, che è una matrice di messaggi che sono risposte al messaggio. Queste risposte possono avere risposte, loro stesse. Questo array può anche essere NULL, per i nodi foglia, perché non hanno alcuna risposta.
Tutte le altre variabili contengono solo alcuni campi che definiscono un messaggio effettivo tra due utenti.
Quello che sto cercando di fare è di visualizzazione in tutti i miei messaggi Twig in un formato arborescente, in questo modo:
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
Il problema è che Twig supporta solo foreach
loop e non sono sicuro di come mostra questo formato quando ha una profondità maggiore, più grande di due.
{% 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 %}
Questo visualizzerà ogni risposta di un messaggio, ma come posso visualizzare i messaggi annidati, in tutta la profondità?
Hai visto [Twig - Come eseguire il rendering di un albero] (http://stackoverflow.com/questions/8326482/twig-how-to-render-a-tree)? – HPierce