web-dev-qa-db-fra.com

Erreur de compilation: impossible d'utiliser isset () sur le résultat d'une expression

Je reçois cette erreur dans une application que je migre de SF2.0.x vers SF2.7:

[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

Je ne sais pas ce qui ne fonctionne pas ou comment résoudre ce problème, alors j'ai besoin de conseils. Voici la ligne dans le fichier de cache où Stacktrace est signalé:

    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 " ";

Qu'est-ce que j'ai cette TwigExtension:

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';
    }
}

Et j'utilise le template comme suit:

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

Où pourrait être le problème ici? Aucun conseil?

7
ReynierPM

De documentation :

isset () ne fonctionne qu'avec des variables, car tout ce qui va passer entraînerait une erreur d'analyse. 

Vous ne passez pas directement une variable à isset(). Vous devez donc d'abord calculer la valeur, l'assigner à une variable, puis la transmettre à isset().

Par exemple, ce que vous faites en ce moment est quelque chose comme:

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

Ce que vous devez faire à la place est:

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

Pourquoi faites-vous tant de code inutile?

Pourquoi ne pas simplement:

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