我正在编写自己的MVC框架,它基于指定要加载哪个模板文件的layout.xml文件加载模板文件。通过这种方式,可以通过XML和新(phtml)模板文件轻松地扩展或修改现有页面。
为此,我使用DOMDocument对象将模板文件加载到正确的HTML元素中。现在,这是正常工作的,但是我刚刚意识到,在将模板文件的PHP内容转换为DOMDocument时,只需将其解释为普通的HTML。
我该如何正确地处理这件事?我想我应该使用eval()从模板文件中执行DOMDocument,然后将结果插入到DOMDocument对象中。然而,我宁愿避免使用eval,因为它的形象不好(危险和沉重?)不过,这似乎正是我要找的东西。
如果有人能在这个问题上给我一些建议,我将不胜感激。
发布于 2018-09-09 06:21:15
我认为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;https://stackoverflow.com/questions/52209036
复制相似问题