-
Notifications
You must be signed in to change notification settings - Fork 33
Open
Description
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
Labels
No labels