ob_start()替代PHP中的模板?

时间:2011-09-11 13:19:48

标签: php templates output-buffering

问题已更新

我正在构建MVC框架,对于我的模板和视图,我将有一个主页面模板文件,我的视图将包含在此模板中。

我看到这样做的唯一方法是使用输出buffereing

ob_start();
include 'userProfile.php';
$content = ob_get_clean();

还有其他办法吗?我认为输出缓冲不是性能最好的,因为它使用了大量的内存

这是一个示例控制器,$this->view->load('userProfile', $profileData);  是使用输出biffering加载的部分,以便它可以包含在下面的主模板中的$ content部分

查看课程

public function load($view,$data = null) {

    if($data) {
        $this->data = $data;
        extract($data);
    } elseif($this->data != null) {
            extract($this->data);
    }

    ob_start();
    require(APP_PATH . "Views/$view.php");
    $content = ob_get_clean();
}

控制器

/**
 * Example Controller
 */
class User_Controller extends Core_Controller {



    // domain.com/user/id-53463463
    function profile($userId)
    {
        // load a Model
        $this->loadModel('profile');  
        //GET data from a Model
        $profileData = $this->profile_model->getProfile($userId);

        // load view file
        $this->view->load('userProfile', $profileData);
    }
}

主要网站模板

<html>
<head>

</head>

<body>

<?php echo $content; ?>

</body>
</html>

1 个答案:

答案 0 :(得分:0)

使用模板系统不一定与输出缓冲有关。您提供的示例代码中有几件事情当然不应该被视为理所当然:

一:

flushblocks(); // what does this do??

还有两个:

$s = ob_get_clean();

为什么代码会将模板输出捕获到变量中?在输出之前是否有必要对此进行一些处理?如果没有,您可以简单地丢失输出缓冲调用,并立即将输出发送到浏览器。