phparraysloopssymfonytwig

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?


Solution

  • 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 !