From 4823761626b7611e9e6f671ccf52a2b28bdfd8e4 Mon Sep 17 00:00:00 2001 From: Mirko Nosenzo Date: Fri, 29 Mar 2024 09:35:14 +0100 Subject: [PATCH] Partials with multiple or named parameters --- src/Handlebars/Template.php | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Handlebars/Template.php b/src/Handlebars/Template.php index d18205a..ed1761d 100755 --- a/src/Handlebars/Template.php +++ b/src/Handlebars/Template.php @@ -319,7 +319,25 @@ private function partial(Context $context, $current) $partial = $this->handlebars->loadPartial($current[Tokenizer::NAME]); if ($current[Tokenizer::ARGS]) { - $context = $context->get($current[Tokenizer::ARGS]); + $args = explode(' ', $current[Tokenizer::ARGS]); + $newContext = []; + foreach ($args as $arg) { + $kv = explode('=', $arg, 2); + if (count($kv) == 1) { + if (count($args) > 1) { + throw new RuntimeException( + $current[Tokenizer::NAME] . ' call has invalid syntax' + ); + } + $value = trim($kv[0]); + $newContext = $context->get($value); + } else { + $key = trim($kv[0]); + $value = trim($kv[1]); + $newContext[$key] = $context->get($value); + } + } + $context = $newContext; } return $partial->render($context);