Как динамически сшить шаблон с переменными? - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь позволить пользователю определить значения для передачи в строку.

Как я могу динамически сшивать некоторые переменные с шаблоном без использования eval () или необходимости статически определять все переменные?

Я ищу решение для маленьких отпечатков. Не включать весь шаблонизатор или библиотеку.

<?php

// Create a template
  $tpl = " ... {$var['a']} ... "; // User defined content

// State variables
  $var = [
    'a' => 1,
    'b' => 2,
  ];

// Stitch
  echo $tpl;

Таким образом, PHP может выполнить позднюю обработку замены псевдонима / переменной.

Я подумал, что http_build_query () может быть полезно генерировать кучу псевдонимов для использования с strtr (). Но он не чувствует себя чистым или неуместным делать это таким образом.

Что-то вроде этого с поддержкой рекурсивных массивов подойдет:

<?php
  echo strtr(' ... {a.1} ...', $var);

1 Ответ

0 голосов
/ 02 марта 2020

Просто измените формат замещения:

<?php

$tpl = "Dear @name@, I would love to come to @location@."; 

$subs =
[
    '@name@'     => 'Julian',
    '@location@' => 'Freetown'
];    

echo strtr($tpl, $subs);

Вывод:

Dear Julian, I would love to come to Freetown.

В качестве альтернативы обертка вокруг strtr:

function template($template_str, array $vars) {
    foreach($vars as $k => $v)
        $substitutes['@'.$k.'@'] = $v;
    return strtr($template_str, $substitutes);
}

$tpl = "Dear @name@, I would love to come to @location@."; 

$subs = [
    'name'     => 'Julian',
    'location' => 'Freetown'
];

echo template($tpl, $subs);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...