2017-03-25 2 views
0

Ich muss wissen, wenn ein Argument für ein Zweigmakro definiert ist, vs wenn ein Null als Wert übergeben wurde. Wenn ich "is defined" verwende, dann berücksichtigt dies beide Bedingungen, da Zweig scheinbar alle undefinierten Argumente auf null setzt.Ermitteln, ob Zweigmakroargument übergeben wurde oder Null

Zum Beispiel, hier sind zwei Anrufe, die zuerst das Makro ohne Parameter aufgerufen wird und der zweite mit einem Nullwert für das Argument:

{% import 'macros.twig' as macros %} 
{{ macros.method() }} 
{{ macros.method(null) }} 

Und dies würde die Makrodefinition sein:

{% macro method(value) %} 
    {# condition to determine if value is undefined or null? #} 
{% endmacro %} 
+0

[Definiert] (https://twigfiddle.com/twuvaj) berücksichtigt nicht 'null' – DarkBee

+0

@DarkBee Ich vermute, das wahre Problem ist, dass Zweig undefinierte Argumente auf null setzt. – scader

Antwort

1

Um genauer zu sehen, was Twig mit der Definition von Makros macht, habe ich die kompilierte Quelle hinzugefügt. Es wie Sie sagen, setzt Zweig alle Variablen standardmäßig null, so testen, ob eine Variable zu einem Makro übergeben wurde, wird

Zweig

{% macro vars(foo, bar, foobar) %} 
{% endmacro %} 

{% import _self as forms %} 
{{ forms.vars(null, false) }} 

zusammengestellt Quelle

// line 1 
public function macro_vars($__foo__ = null, $__bar__ = null, $__foobar__ = null, ...$__varargs__) 
{ 
    $context = $this->env->mergeGlobals(array(
     "foo" => $__foo__, 
     "bar" => $__bar__, 
     "foobar" => $__foobar__, 
     "varargs" => $__varargs__, 
    )); 

    $blocks = array(); 

    ob_start(); 
    try { 

     return ('' === $tmp = ob_get_contents()) ? '' : new Twig_Markup($tmp, $this->env->getCharset()); 
    } finally { 
     ob_end_clean(); 
    } 
} 
schwer
+0

Vielen Dank für die Freigabe der kompilierten Quelle. – scader

Verwandte Themen