PHP:包含模板文件

时间:2011-02-17 19:49:54

标签: php model-view-controller templates view

我正在尝试构建自己的简单模板处理程序,以便能够轻松地将文件嵌套并组合成变量,并在必要时调用这些变量,如下所示:

$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?

2 个答案:

答案 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)