Compile Error: Cannot use isset() on the result of an expression

匿名 (未验证) 提交于 2019-12-03 01:22:02

问题:

I'm getting this error in a app I am migrating from SF2.0.x to 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

I don't know what is failing or how to fix this so I need some advise. This is the line at cache file where the Stacktrace is reported:

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

What I have this 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';     } }

And I'm using at template as follow:

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

Where could be the issue here? Any advice?

回答1:

From documentation:

isset() only works with variables as passing anything else will result in a parse error.

You're not directly passing a variable to isset(). So you need to calculate the value first, assign it to a variable, and then pass that to isset().

For example, what you're doing at the moment is something like:

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

What you need to do instead is:

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


回答2:

Why are you doing so much useless code?

Why don't just:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!