2016-07-23 9 views
2

Ich möchte, wenn es möglich ist, Länge des Arrays mit Bedingung auf Attribut zu erhalten, ohne eine andere Abfrage in der Steuerung zu erstellen.Get Länge des Arrays mit Bedingung auf Attribut

public function pageAction() 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $pages = $em->getRepository('AppBundle:Page')->findAll(); 
    return $this->render(':Frontend/includes:menu.html.twig', array(
     'pages' => $pages 
    )); 
} 

in der Ansicht

//number of all pages 
{{ pages|length }} // output 15 (ok) 

jetzt ist es möglich, die Anzahl der Seiten zu bekommen, wo page.activate == true aus dem gleichen Ergebnis in der Steuerung zurückgegeben?

// number of page where page.activate == true 
?? 
+0

Sie können einfach findBy anstelle von findAll verwenden. –

+0

Ist 'activate' ein Attribut oder eine Zeile der DB? Hast du auch einen Getter dafür? Was ist der Getter? –

+0

@AlvinBunk Ja, es ist eine Zeile in der Datenbank mit dem Typ boolean 'öffentliche Funktion getActivate() { Rückgabe $ this-> aktivieren; } ' – hous

Antwort

2

Dies sollte hous arbeiten:

{% set pageCount = 0 %}{# Sets variable #} 
{% for p in pages if p.getActivate %} 
    {% set pageCount = pageCount + 1 %} 
{% endfor %} 

<p>Activated Pages: {{ pageCount }} 

Versuchen Sie es!

+0

Warum diese Logik in der Ansichtsvorlage anstelle eines Dienstes ist oder zumindest der Controller? Zum Beispiel wäre die benutzerdefinierte Zweigfunktion ein guter Kandidat, um die Logik zu verschieben. – pavlovich

+0

@pavlovich, der Code von Alvin funktioniert gut, aber wenn Sie ein Beispiel haben, wie man es aus der Ansicht Vorlage machen? kannst du mir helfen ? – hous

+0

Hous, ich bin mir nicht sicher, wonach du fragst? Ich dachte, du wolltest nur die Anzahl der aktivierten Seiten ausdrucken? Können Sie genauer erklären, was Sie genau benötigen? –