ob_start () Альтернатива для шаблонов в PHP? - PullRequest
2 голосов
/ 11 сентября 2011

Вопрос обновлен

Я создаю инфраструктуру MVC, для моих шаблонов и представлений у меня будет файл шаблона главной страницы, и мои представления будут включены в этот шаблон.

Единственный способ сделать это - использовать выходной буфер

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

Есть ли другой способ сделать это? Я думаю, что выходная буферизация не самая лучшая по производительности, так как использует много памяти

Вот пример контроллера, $this->view->load('userProfile', $profileData); это часть, которая будет загружена с использованием раздвоения вывода, чтобы ее можно было включить в основной шаблон ниже в часть $ 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 голосов
/ 11 сентября 2011

Использование системы шаблонов не обязательно связано с буферизацией вывода. В приведенном вами примере кода есть пара вещей, которые, безусловно, не следует воспринимать как должное:

One:

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

И два:

$s = ob_get_clean();

Почему код захватывает вывод шаблона в переменную? Нужно ли выполнять некоторую обработку этого перед выводом? Если нет, вы можете просто потерять вызовы буферизации вывода и сразу же отправить вывод в браузер.

...