Запуск PHP для файлов шаблонов, загруженных из XML как DOMDocument - PullRequest
0 голосов
/ 06 сентября 2018

Я пишу свою собственную маленькую инфраструктуру MVC, которая загружает файлы шаблонов на основе файла (ов) layout.xml, в котором указывается, какие файлы шаблонов куда загружать. Таким образом, существующие страницы могут быть легко расширены или изменены с помощью XML и новых (phtml) файлов шаблонов.

Для этого я использую DOMDocument объекты для загрузки файлов шаблонов в нужные элементы HTML. Теперь это работает правильно, однако я только что понял, что содержимое PHP файлов шаблонов будет просто интерпретироваться как обычный HTML при преобразовании его в DOMDocument.

Как мне справиться с этим правильно? Я решил выполнить PHP из файлов шаблонов, используя eval () , а затем вставить полученный HTML-код в объект DOMDocument. Однако я бы предпочел не использовать eval из-за его плохого образа (опасного и тяжелого?). Похоже, именно это я и ищу.

Если бы кто-нибудь мог дать мне совет по этому вопросу, он был бы очень признателен.

1 Ответ

0 голосов
/ 09 сентября 2018

Я думаю, что 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;
...