Existem muitos sistemas de modelagem poderosos em php, como smarty, twig etc., mas às vezes você só quer preencher algumas strings com espaços reservados, sem introduzir uma grande biblioteca em seu projeto.
Esta classe fornecerá um método TemplateRenderer::renderTemplate($template, $placeholderArray);
para preencher alguma string de modelo com os valores fornecidos em uma matriz associativa.
por exemplo, você pode ter algum modelo
$templateString = 'Hi {$who}, welcome to {$where}.';
e preencha-o com seus dados.
$data = array(
"who" => "Thomas",
"where" => "munich",
);
o TemplateRenderer
fará a seguinte saída:
echo TemplateRenderer::renderTemplate($templateString, $data);
// => Hi Thomas, welcome to munich.
Aqui está a implementação:
class TemplateRenderer {
public static function renderTemplate($template, $placeholderArray) {
$placeholderKeys = array_keys($placeholderArray);
$subject = $template;
foreach ($placeholderKeys as $placeholderKey) {
$placeholderValue = $placeholderArray[$placeholderKey];
$pattern = '/{$'.$placeholderKey.'}/';
$replace = $placeholderValue;
$subject = preg_replace($pattern,
TemplateRenderer::preg_escape_back($replace), $subject);
}
return $subject;
}
public static function preg_escape_back($string) {
// Replace $ with $ and with \
$string = preg_replace('#(?<!\\)(\$|\\)#', '\\$1', $string);
return $string;
}
}