Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对从XML加载为DOMDocument的模板文件运行PHP_Php_Xml_Model View Controller_Xml Parsing_Html Parsing - Fatal编程技术网

对从XML加载为DOMDocument的模板文件运行PHP

对从XML加载为DOMDocument的模板文件运行PHP,php,xml,model-view-controller,xml-parsing,html-parsing,Php,Xml,Model View Controller,Xml Parsing,Html Parsing,我正在编写自己的小MVC框架,该框架基于layout.xml文件加载模板文件,该文件指定在何处加载哪些模板文件。通过这种方式,可以通过XML和新(phtml)模板文件轻松地扩展或修改现有页面 为此,我使用DOMDocument对象将模板文件加载到正确的HTML元素中。这现在可以正常工作了,但是我刚刚意识到模板文件的PHP内容在转换为DOMDocument时将被简单地解释为普通HTML 我如何以正确的方式应对这一问题?我想我应该使用eval()从模板文件执行PHP,然后将生成的HTML插入DOMD

我正在编写自己的小MVC框架,该框架基于layout.xml文件加载模板文件,该文件指定在何处加载哪些模板文件。通过这种方式,可以通过XML和新(phtml)模板文件轻松地扩展或修改现有页面

为此,我使用DOMDocument对象将模板文件加载到正确的HTML元素中。这现在可以正常工作了,但是我刚刚意识到模板文件的PHP内容在转换为DOMDocument时将被简单地解释为普通HTML

我如何以正确的方式应对这一问题?我想我应该使用eval()从模板文件执行PHP,然后将生成的HTML插入DOMDocument对象。然而,我宁愿避免使用eval,因为它的形象不好(危险和沉重?)。这似乎正是我想要的


如果有人能就这个问题给我一些建议,我将不胜感激。

我认为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;