Skip to content

Custom helper not working as expected  #11

@abhishek-ejam

Description

@abhishek-ejam

I've created a custom helper that evaulates a conditional expression (similar to if with conditional expression) as below:

$this->handlebars->addHelper("compare",
    function($template, $context, $args, $source){
        
        list($operandSpecName, $operator, $operand2) = explode(" ",$args);

        $operand1 = $context->get($operandSpecName);
        $operator = str_replace("'", "", $operator);
        $operand2 = str_replace("'", "", $operand2);

        switch($operator){
            case '==':
                return ($operand1 == $operand2) ? true: false;
            case '===':
                return ($operand1 === $operand2) ? true: false;
            case '!=':
                return ($operand1 != $operand2) ? true: false;
            case '!==':
                return ($operand1 !== $operand2) ? true: false;
            default:
                return false;
        }
    }
);

Here's my template:

$template = `"{{#compare comics '==' 'Marvel'}}{{#compare movie '==' 'Avenger'}}8{{\/compare}}{{\/compare}}{{#compare comics '==' 'DC'}}{{#compare movie '==' 'Batman'}}9{{\/compare}}{{\/compare}}"

And here's the data I've passed:

$data = [
    "comics" => "Marvel",
    "movie" => "Avenger"
];

I've called the render function as below:

$this->handlebars->render($template, $data);

I expect the result of expression as 8 since only the first two expression of compare helper are evaluated as being true.
However, I get the output as 1189. I noticed that the helper returns 1 each time it evaluates a true condition and it also outputs result even if the codition does not evaluates true.
I was wondering if anyone can help me to correct the logic of my custom helper?
Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions