2016-07-29 5 views
0

Ich habe eine Entität erstellt, die ich verwenden möchte, um Ereignisse wie "[dieser Benutzer] hat die Mission akzeptiert/abgelehnt" zu speichern. Bis jetzt habe ich kein Problem, das Ereignis zu speichern, aber ich habe Probleme, es als eine Liste in der Ansicht der Mission anzuzeigenKann ein Array mit Zweig nicht richtig ausnutzen

Ich erstellte eine Schleife, so dass jede Zeile aus der Protokolltabelle anzeigen sollte, wenn die ID der Mission mit dem Rest der Zeile Spiel Logbuch mit der aktuellen 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(); 
     } 
    } 

zuerst gespeichert, statt $history['action'] = $l->getAction(); zu verwenden, habe ich versucht, mit array_push($history, $l->getUser(), $l->getAction(), $l->getDay());, aber das Ergebnis bekam ich war unbrauchbar, da der Zweig-Dump ich in Folge erhalten, sah wie folgt aus:

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

Also mit dem $history['user'] Sache, die ich verwendet, ich habe jetzt die folgenden Zweig dump:

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

Im Moment habe ich zwei Fragen: Erstens, ich möchte eine Schleife erstellen, so dass ich Zeile jedes Protokoll der anzeigen kann wie folgend:

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

Für eine unbekannte, mit dieser Schleife und wie es in Zweig angezeigt ist, kann ich nichts aufrufen, indem sie mit {{h.user}} ohne eine Nachricht zu bekommen mir zu sagen, dass „user doesn‘ t existieren. Außerdem, wenn ich {{dump (history)}} mache, bekomme ich (dh) "isitech" und nicht [user] => "Isitech", also kann ich die Daten nicht verwenden.

Außerdem habe ich derzeit zwei Einträge in meinen Protokollen über denselben Benutzer, aber ich schaffe es, nur einen zu haben.

Ich glaube, ich bin etwas fehlt, aber ich kann nicht finden, wo, wie und warum ..

Jede Idee?

+0

Nun ... das ist sehr verwirrend. Kannst du es besser erklären? – felipsmartins

+0

Bearbeitete meine Frage, sag mir, wenn du es besser verstehst, entschuldige ich mich, ich hatte einen langen und harten Tag: ') – Jaeger

+0

Schwirren Sie durch das Protokoll oder die Geschichte in der Vorlage? Aus dem Codebeispiel und den Fehlermeldungen sieht es so aus, als würden Sie den Verlauf durchlaufen, was bedeutet, dass jeder "h" der Wert aus Ihrem Historien-Array ist: der Benutzer, die Aktion und der Tag. – StuBez

Antwort

0

Eigentlich ging ich zu weit in meiner Schleife, und das ist, warum ich couldn‘ t haben mehr als ein Ergebnis.

Anstatt jede Spalte mit ihrem Namen zu setzen und in der Hoffnung, dass ich meine Spalte Zeit, um die Anzahl der vorhandenen Protokolle erhalten werde ich neu erstellt einfach meine Schleife wie folgt:

$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 
    } 
} 

Mit dieser Art und Weise kann ich jetzt benutze $ history, um 'h' zu wiederholen und zeige, was ich zum Beispiel mit 'h.day' machen möchte. Danke für deine Hilfe, es half mir herauszufinden, was in meinem Code falsch war!

2

Ihre PHP-Schleife erstellen das Bestücken des Arrays $history ist verwirrend. Viele Variablen sind uns unbekannt.

Sie können Ihre Log-Entitäten jedoch mit dem Query Builder der Doktrin filtern.

$logsOfMission = $this->getDoctrine()->getRepository("MissionBundle:Log") 
    ->createQueryBuilder('l') // I create the query builder 
    ->where('l.missionId = :id') // Tell him I want only logs of the mission id 'id' 
    ->setParameter('id', $myMissionObject->getId()) // I bind 'id' with the id of my mission object 
    ->getQuery() // Give me my query doctrine please (the query object returned by doctrine) 
    ->getResult() // Thanks :D (access to the attribute containing the query's result) 
; 

dann die Stelle der Geschichte einer $logsOfMission Array in Zweig verwenden.

Sie können mehr über die von Doctrine and Symfony angebotenen Möglichkeiten lernen

bearbeiten

Nach nochmaligem Lesen, ich nahm es einige Fehler in Ihrem Code waren.

auf diese Gründend:

foreach($log as $l) { 
    if($l->getMission() == $mission->getId()) { 
     $history['user'] = $l->getUsername(); 
     // ... 

Sie wurden für jede Linien die Erstellung des Arrays fehlt

foreach($log as $l) { 
    if($l->getMission() == $mission->getId()) 
     $history = array(
      'user' => $l->getUsername(), 
      'action' => $l->getAction(), 
      'day' => $l->getDay() 
     ); 
    } 
} 
Verwandte Themen