Inherit parent vars and add own vars when a template is included with vars from another template that has vars; add unit tests for vars inheritance

This commit is contained in:
Kijin Sung 2023-10-21 13:52:02 +09:00
parent 5b47151440
commit 6085b82d19
7 changed files with 92 additions and 12 deletions

View file

@ -215,7 +215,7 @@ class Template
}
elseif (is_object($vars))
{
$this->vars = $vars;
$this->vars = clone $vars;
}
else
{
@ -223,6 +223,25 @@ class Template
}
}
/**
* Add vars.
*
* @param array|object $vars
* @return void
*/
public function addVars($vars): void
{
if (!isset($this->vars))
{
$this->vars = new \stdClass;
}
foreach (is_object($vars) ? get_object_vars($vars) : $vars as $key => $val)
{
$this->vars->$key = $val;
}
}
/**
* Compile and execute a template file.
*
@ -535,9 +554,13 @@ class Template
}
// Set variables.
if ($this->vars)
{
$template->setVars($this->vars);
}
if ($vars !== null)
{
$template->setVars($vars);
$template->addVars($vars);
}
// Compile and return.

View file

@ -402,7 +402,8 @@ class TemplateParser_v2
// Generate the code to create a new Template object and compile it.
$tpl = '<?php $__tpl = new \Rhymix\Framework\Template(' . $dir . ', "' . $path . '", "' . ($this->template->extension ?: 'auto') . '"); ';
$tpl .= !empty($attrs['vars']) ? '$__tpl->setVars(' . self::_convertVariableScope($attrs['vars']) . '); ' : '';
$tpl .= 'if ($this->vars): $__tpl->setVars($this->vars); endif; ';
$tpl .= !empty($attrs['vars']) ? '$__tpl->addVars(' . self::_convertVariableScope($attrs['vars']) . '); ' : '';
$tpl .= 'echo $__tpl->compile(); ?>';
// Add conditions around the code.