我正在尝试构建自己的简单模板处理程序,以便能够轻松地将文件嵌套并组合成变量,并在必要时调用这些变量,如下所示:
$partial['header'] = 'header.php';
foreach($partial as $part => $view ) {
$output[$name] = file_get_contents( APPPATH .'views/' . $view . '.php' );
}
extract($output, EXTR_PREFIX_ALL, 'template' );
include 'mytemplate.php';
mytemplate.php
模板文件:
<?php
echo $template_header; // Shows the header.
问题:
显然,通过file_get_contents
加载PHP文件不会在加载的文件中调用任何PHP代码,我确信有更好的选项可用,然后使用eval
。 我应该更改什么才能在我的模板文件中使用PHP?
答案 0 :(得分:1)
阅读脚本绝对不是最好的方法。你必须eval
他们。
仅供记录:
include($filename);
在功能上与:
相同 eval("?>" . file_get_contents($filename));
克服它。 “eval is evil”meme就是这样,一个模因。因此,如果您想保留自己的appraoch,可以使用eval("?>$template_header");
代替echo
。
替代方法是跳过文件读取,让$template_vars
包含文件名而不是其内容。然后做一个普通的include($template_header);
答案 1 :(得分:1)
可能更难看,但要完全按照自己的意愿行事:
function custom_get_content($filename){
if (is_file($filename)) {
ob_start();
include $filename;
$contents = ob_get_contents();
ob_end_clean();
return $contents;
}
}
然后你可以打电话给它:
foreach($partial as $part => $view ) {
$output[$name] = custom_get_content( APPPATH .'views/' . $view . '.php' );
}
我从PHP手册中的注释中复制了它,但是再也找不到它了(这就是为什么它可能太丑了:D)