wake-up-neo.com

Fehler beim Kompilieren: isset () kann nicht für das Ergebnis eines Ausdrucks verwendet werden

Ich erhalte diesen Fehler in einer App, die ich von SF2.0.x auf SF2.7 migriere:

[1] Symfony\Component\Debug\Exception\FatalErrorException: Compile Error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead)
    at n/a
        in /var/www/html/reptooln_admin/app/cache/dev/twig/68/7f/63589dd3687cb849dd68e6b6c10aa99eda1d82f95a5f3ac52a864d200499.php line 39

Ich weiß nicht, was fehlschlägt oder wie ich das beheben kann, also brauche ich einen Rat. Dies ist die Zeile in der Cache-Datei, in der der Stacktrace gemeldet wird:

    if ((((empty((isset($context["form_action"]) ? $context["form_action"] : $this->getContext($context, "form_action"))) == true) || (isnull((isset($context["form_action"]) ? $context["form_action"] : $this->getContext($context, "form_action"))) == true)) || (isset((isset($context["form_action"]) ? $context["form_action"] : $this->getContext($context, "form_action"))) == false))) {
                echo " ";
                $context["form_action"] = "";
                echo " ";

Was ich diese TwigExtension habe:

class PDOneTwigExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            'var_dump'   => new \Twig_Filter_Function('var_dump'),
            'empty' => new \Twig_Filter_Function('empty', array($this, 'is_empty')),
            'isset' => new \Twig_Filter_Function('isset', array($this, 'is_set')),
            'isnull' => new \Twig_Filter_Function('isnull', array($this, 'is_null')),
            'ucfirst' => new \Twig_Filter_Function('ucfirst', array($this, 'uc_first')),
            'ucwords' => new \Twig_Filter_Function('ucwords', array($this, 'uc_words')),
            'count' => new \Twig_Filter_Function('count', array($this, 'co_unt')),
            'sizeof' => new \Twig_Filter_Function('sizeof', array($this, 'size_of')),
            'concat' => new \Twig_Filter_Function('concat', array($this, 'concat')),
            'in_array' => new \Twig_Filter_Function('in_array', array($this, 'inarray')),
            'array' => new \Twig_Filter_Function('array', array($this, 'array_')),
            'add_to_array' => new \Twig_Filter_Function('add_to_array', array($this, 'add_to_array')),
            'replace' => new \Twig_Filter_Function('replace', array($this, 'replace')),
            'htmlentitydecode' => new \Twig_Filter_Function('htmlentitydecode', array($this, 'htmlentitydecode'))
        );
    }

    public function is_empty($sentence)
    {
        return empty($sentence) ? true : false;
    }

    // rest of methods goes here

    public function getName()
    {
        return 'pdone_twig_extension';
    }
}

Und ich verwende at template wie folgt:

{% if form_action|empty == true or form_action|isnull == true or form_action|isset == false %} {% set form_action = '' %} {% endif %}

Wo könnte das Problem hier sein? Irgendein Rat?

7
ReynierPM

Aus Dokumentation :

isset () funktioniert nur mit Variablen, da die Weitergabe von Fehlern zu einem Analysefehler führt. 

Sie übergeben eine Variable nicht direkt an isset(). Sie müssen also zuerst den Wert berechnen, ihn einer Variablen zuordnen und ihn dann an isset() übergeben.

Zum Beispiel ist das, was Sie gerade tun, ungefähr so:

if(isset($something === false)) { } // throws a parse error, because $something === false is not a variable

Was Sie stattdessen tun müssen, ist:

$something = false;
if(isset($something)) { ... }
20
Dan Blows

Warum machst du so viel nutzlosen Code?

Warum nicht einfach:

{% if form_action|empty == true %} {% set form_action = '' %} {% endif %}
0
Alex