2016-08-03 14 views
2

Ich arbeite an einer ziemlich komplexen mehrsprachigen Website, die verschiedene Teiltöne basierend auf dem HTML-Gebietsschema rendern wird.Zweig Prüfen auf partielle Existenz vor include

Ich habe eine partielle Struktur, die das an den Dateinamen angehängte Gebietsschema verwendet, um den richtigen auszuwählen. Beispielsweise;

{% include '@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig' with {'title' : resource.title } %} 

Während dies funktioniert, besteht ein Risiko, wenn die ausgewählten locale haben (noch) nicht seinen Teil geschaffen hatte, wird dies einen Fehler aus. Was ich tun möchte, ist, nach der Existenz des Partials zu suchen, bevor es versucht wird, es zu rendern und auf einen Standard zurückzufallen, falls es noch nicht existiert.

{% if '@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig' %} 
    {% include '@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig' with {'title' : resource.title } %} 
{% else %} 
    {% include '@BundleName/Layout/Text/_partial-name.html.twig' with {'title' : resource.title } %} 
{% endif %} 

Offensichtlich funktioniert das nicht, aber das ist die Art von was ich bin nach!

Antwort

5

als vielmehr testen, ob die teilweise vorhanden Sie ignore missing verwenden können:

{% include 'partial.html' ignore missing %} 

Wenn Sie einen Rückfall haben möchten, wenn die Datei fehlt Ihnen kann ein Array an die Funktion umfassen passieren. Dadurch wird die gehören die erste gefundene Vorlage im Array machen

{% include [ 
       ('@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig'), 
       '@BundleName/Layout/Text/_partial-name.html.twig' 
      ] with {'title' : resource.title } %} 
+0

Perfekt, das ist genau das, was ich brauchte. – Alex

1

Sie |default Zweig Filter verwenden, können einen Standardwert auf eine Variable, um zu bestimmen, ob der Wert nicht definiert oder leer ist:

htmlLocale|default('en') 

Sie kann auch prüfen, ob die Variable leer und/oder definiert ist:

{% if htmlLocale is not empty and htmlLocale is defined %} 
    {% include '@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig' with {'title' : resource.title } %} 
{% else %} 
    {% include '@BundleName/Layout/Text/_partial-name.html.twig' with {'title' : resource.title } %} 
{% endif %} 
+0

Ich denke, Sie haben den Punkt der Frage leicht verpasst; Es ist nicht zu Text, wenn das Gebietsschema festgelegt ist, zu testen, ob das Teil vorhanden ist. @DarkBee ist ziemlich genau richtig – Alex