Asked  7 Months ago    Answers:  5   Viewed   38 times

I'm getting this error in a app I am migrating from SF2.0.x to SF2.7:

[1] SymfonyComponentDebugExceptionFatalErrorException: 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?

 Answers

87

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)) { ... }
Wednesday, March 31, 2021
 
nomie
answered 7 Months ago
23

I execute the test of the other vendor of my project with this configuration:

/app/phpunit.xml.dist

<testsuites>
    <testsuite name="Project Test Suite">
        <directory>../vendor/vendorname/vendor-catalog-bundle/Acme/DemoCatalogBundle/Tests/Entity</directory>
        <directory>../src/*/*Bundle/Tests</directory>
        <directory>../src/*/Bundle/*Bundle/Tests</directory>
        <directory>../vendor/vendorname/acme-validator-bundle/Acme/DemoBundle/Tests</directory>
    </testsuite>
</testsuites>

Hope this help

Wednesday, March 31, 2021
 
Zulakis
answered 7 Months ago
22

your code is so LONG that you can not really read it:

isset($_POST['idPresented']

is missing his ')' so change

isset($_POST['idPresented'] into isset($_POST['idPresented'])

Saturday, May 29, 2021
 
DMTintner
answered 5 Months ago
91

Try opening the file in a text editor, and replacing " " with " " globally.

My colleague was having the exact same issue on the same file, and it turns out the problem was that the file was using something other than spaces as spaces. file(1) showed that the file was a UTF-8 Unicode text rather than plain ASCII.

I believe this may be caused by the source of the copy + paste using different space characters.

Saturday, May 29, 2021
 
Gil
answered 5 Months ago
Gil
28

As mentioned in the comments (and the error message), you cannot pass the result of an expression to isset.

You can use multiple isset calls, or reverse the logic of your if/else block and pass multiple parameters to isset, which i think is the cleanest solution:

//true if both are set
if(isset($size, $color)) {
    $style = 'font-size : ' . $size . ';color:' . $color;
}else{
    $style = '';
}

You can clean this up a little further by setting the default value first, thus avoiding the need for an else section:

$style = '';
if(isset($size, $color)) {
    $style = 'font-size : ' . $size . ';color:' . $color;
}

You could even use a ternary, though some people find them harder to read:

$style = isset($size, $color) ? 'font-size : ' . $size . ';color:' . $color : '';
Wednesday, July 7, 2021
 
PHLAK
answered 4 Months ago
Only authorized users can answer the question. Please sign in first, or register a free account.
Not the answer you're looking for? Browse other questions tagged :
 
Share