Jaeger Jaeger - 4 months ago 16
Twig Question

Can't exploit properly an array with twig

I created an entity that I want to use to save events such as "[this user] accepted / declined the mission". So far I have no problem to save the event, but I'm having issues to display it as a list in the mission's view

I created a loop so that every line from the log's table should show if the the mission's id saved with the rest of the log's line match with the current mission

$history = array();
$log = $this->getDoctrine()->getRepository('MissionBundle:Log')->findAll();
foreach($log as $l){
if($h->getMission() === $mission->getId()){
$history['user'] = $l->getUsername();
$history['action'] = $l->getAction();
$history['day'] = $l->getDay();
}
}


At first, instead of using
$history['action'] = $l->getAction();
, I tried with
array_push($history, $l->getUser(), $l->getAction(), $l->getDay());
, but the result i got was unusable, since The twig dump I get in result that looked like the following:

0 => "Isitech"
1 => "defined the mission as filled"
2 => DateTime {#1421 ▶}
3 => "Isitech"
4 => "defined the mission as declined"
5 => DateTime {#1426 ▶}


So with the
$history['user']
thing that I used, I now have the following twig dump:

array:3 [▼
"user" => "Isitech"
"action" => "defined the mission as declined"
"day" => DateTime {#1426 ▶}
]


I currently have two issues: first, I'd like to create a loop so that I can display every log's line as following:

{% for h in history %}
{{ h.user }} {{ h.action }} on {{ h.day | date }}
{{ endfor }}


For an unknown, with this loop and how it's displayed in twig, I can't call anything by using {{ h.user }} without getting a message telling me that "user doesn't exist. Moreover, if I do {{ dump(history) }}, I get (i.e.) "isitech" and not [user] => "Isitech", so I can't use the data

Moreover, I currently have two entries in my logs about the same user, but I manage to have only one.

I think I'm missing out something but I can't find where, how and why..

Any idea?

Answer

Actually, I went too far in my loop, and this is why I couldn't have more than one result.

Instead of setting each column by their name and hoping that I'll get my column time the number of existing logs, I simply recreated my loop as following:

$log = $this->getDoctrine()->getRepository('MissionBundle:Log')->findAll();
foreach($log as $l){
    if($l->getMission() === $mission->getId()){
            array_push($history, $l) 
            //So we're putting an array result directly in an other array
    }
}

With this way, I can now use $history to loop on 'h' and show what I want with 'h.day' for example. Thank you for your help, it helped me finding what was wrong in my code !

Comments