Я пишу свой собственный небольшой фреймворк MVC, который загружает файлы шаблонов на основе файла (ов) layout.xml, который указывает, какие файлы шаблонов куда загружать. Таким образом, существующие страницы могут быть легко расширены или изменены с помощью XML и новых (phtml) файлов шаблонов.
Для этого я использую объекты DOMDocument для загрузки файлов шаблонов в правильные элементы HTML. Сейчас это работает правильно, однако я только что понял, что PHP-содержимое файлов шаблонов будет просто интерпретироваться как простой HTML при преобразовании его в DOMDocument.
Как мне с этим справиться правильно? Я решил, что выполню PHP из файлов шаблонов с помощью eval (), а затем вставлю полученный HTML в объект DOMDocument. Однако я бы предпочел избегать использования оценка из-за его плохого имиджа (опасного и тяжелого?). Кажется, это именно то, что я ищу.
Если бы кто-нибудь мог дать мне совет по этому поводу, я был бы очень признателен.
Я думаю, что Twig переводит шаблоны в файл PHP, а затем запускает файл PHP для генерации вывода, вы можете сделать аналогичный процесс. Это также позволяет кэшировать сгенерированные шаблоны, что сокращает время синтаксического анализа. Поэтому вместо того, чтобы выполнять отдельные сегменты PHP, вы могли бы сделать что-то вроде ...
// Create temporary file (must have .php extension)
$fh = fopen ( "a.php", "w");
// Write out generated HTML
fwrite($fh, '<SomeTag>Content</SomeTag>'.PHP_EOL);
// Add in PHP code where necessary
fwrite($fh, '<?php'.PHP_EOL);
fwrite($fh, '$a = "1";'.PHP_EOL);
fwrite($fh, 'echo $a;'.PHP_EOL);
fwrite($fh, '?>'.PHP_EOL);
fclose($fh);
// Run the generated file
require "a.php";
Если вы хотите захватить вывод, используйте буферизацию вывода ...
ob_start();
require "a.php";
$html = ob_get_clean();
echo $html;