PHP:包括模板的文件

PHP:包括模板的文件,php,model-view-controller,templates,view,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,

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

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

在中读取脚本显然不是最好的方法。你必须
eval

为了记录在案:

 include($filename);
在功能上与:

 eval("?>" . file_get_contents($filename));
忘掉它。“eval是邪恶的”模因只是一个模因。因此,如果您想保持appraoch,可以使用
eval(“?>$template_header”)而不是
echo


另一种方法是跳过文件读取,让您的
$template\u vars
包含文件名而不是其内容。然后做一个普通的
include($template\u header)

更难看是可能的,但做的正是你想要的:

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)

FYI-a我相信上面的代码会导致路径为
header.PHP.PHP
,因为
$view
将是
header.PHP
。PHP
被附加在
文件\u get\u contents
中,是的,没错。当我将代码复制到SO.Wow上时,我监督了这一点,在编辑时接受了@工业:告诉我编辑是否取消您的决定;)不,这正是我想要的!:)非常感谢Shikiryu!