Zweig Gleichheit if..else in symfony 2 gibt beide Ergebnisse
Bin ich mit Symfony2 mit Zweig und wenn Sie versuchen, um zu bestimmen, die Klasse, die sollte sein ein div-Zweig sagt, dass alle 4 Klassen aktiv sind auch beeing in einer if..else-Klausel.
Umleitung hat nur 1 Wert. Ich habe überprüft die syntax und ich denke, es ist richtig so, vielleicht bin ich etwas fehlt.
Ist es richtig meinem code oder ist etwas falsch in dem Zweig Vergleich (Gleichheit oder if..else-Klausel)?
Hier ist die Twig-code:
{% if redirect == 'a' %}
{% block classA 'active' %}
{% elseif redirect == 'b' %}
{% block classB 'active' %}
{% elseif redirect == 'c' %}
{% block classC 'active' %}
{% else %}
{% block classD 'active' %}
{% endif %}
Und der controller-code:
[...]
$redirect = "a";
return $this->render('FrontendBundle:Default:delete.html.twig', array(
'id' => $id,
'redirect' => $redirect,
'text' => $text)
);
Bearbeitet.
Lösung
Fand ich, dass es nicht möglich ist zu verwenden, wenn die Klauseln aus einem block, so dass die Lösung geht weiter mit einem block für jede Klasse.
Habe ich auch gedacht, dass eine bessere Lösung wäre die Verwendung einer dynamischen name-block, aber ich habe gelesen, dass ist nicht möglich.
Schließlich fand ich diese Lösung von meinem problem in einer anderen Weise: http://peter-hoffmann.com/2012/highlight-active-menu-item-with-twig-and-silex.html
Freundlichen GRÜßEN.
- Was ist Ihre Frage?
- Frage bearbeitet. Sorry, nicht beeing drauf klar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, ob Sie die Einnahme der effizienteste Ansatz für diese Art von Verhalten, aber egal, sollte nicht Ihre Blöcke definiert werden, wie diese?
Auch wenn diese Frage alt ist, möchte ich klarstellen, ein paar Dinge, da gibt es keine wirkliche Antwort.
Das zugrunde liegende problem ist hier, dass
block
ausgewertet wird, während der compile-Zeit, währendif
ausgewertet wird, während der Laufzeit. Dies bedeutet, dass die Blöcke werden immer definiert, kann man nicht definieren Blöcke bedingt. Das ist auch der Grund, warum die Blöcke nicht über dynamische Namen.Mit der Vorlage von der Frage, ist dies kein problem:
Klassen.html-Code.Zweig:
Erbringen wir diese, erhalten wir "aktiv", d.h. die erwartete Ausgabe. Während jeder block definiert ist, wird nur eine von Ihnen erbracht, weil der
if
. Das problem ist nur offenbart, wenn wir die Vererbung. Also sagen wir mal wir haben die folgenden übergeordneten template (ich nehme an, so etwas wie, die verwendet wurde, durch das Plakat):Eltern.html-Code.Zweig:
Und ändern unsere Erweiterung-Vorlage zu erweitern, diese (auch Hinzugefügt classE zu Demonstrationszwecken):
Klassen.html-Code.Zweig:
Nun, wenn wir render-Klassen.html-Code.Zweig, wir bekommen 'activeactiveactiveactive'. Nach wie vor, die Blöcke sind alle definiert mit "aktiv", aber der übergeordneten Vorlage hat kein bedingtes rendering, so dass alle von Ihnen angezeigt werden. Block 'classE' ist nicht dargestellt, da er nicht definiert ist, in der übergeordneten Vorlage.
Um dies zu beheben, muss man im wesentlichen tauschen Sie die
if
undblock
Aussagen.Leider verlieren wir die if/else-Struktur, wenn wir dies tun, so haben wir mehr schreiben Bedingungen. Um dies zu beheben, wir können hinzufügen, ein Zwischenschritt über eine variable.