MVC: View
Понедельник, 25 января 2010
Многие обожествляют MVC и думают, что если не использовать какой-нибудь фреймворк, View реализовать очень сложно. А уж тем более с поддержкой layout-а и возможностью использовать вложенные шаблоны. На самом деле это совсем не так.
// Путь до папки с шаблонами
define('VIEWS_BASEDIR', dirname(__FILE__).'/views/');
class View {
// получить отренедеренный шаблон с параметрами $params
function fetchPartial($template, $params = array()){
extract($params);
ob_start();
include VIEWS_BASEDIR.$template.'.php';
return ob_get_clean();
}
// вывести отренедеренный шаблон с параметрами $params
function renderPartial($template, $params = array()){
echo $this->fetchPartial($template, $params);
}
// получить отренедеренный в переменную $content layout-а
// шаблон с параметрами $params
function fetch($template, $params = array()){
$content = $this->fetchPartial($template, $params);
return $this->fetchPartial('layout', array('content' => $content));
}
// вывести отренедеренный в переменную $content layout-а
// шаблон с параметрами $params
function render($template, $params = array()){
echo $this->fetch($template, $params);
}
}
Даже с таким минимальным кодом работать уже довольно удобно:
$view = new View();
$posts = get_posts();
$view->render('postList', array('posts' => $posts));
layout.php
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Мой суперпроект</title>
</head>
<body>
<h1>Мой суперпроект</h1>
<?=$content?>
</body>
postList.php
<ul>
<?foreach($posts as $post):?>
<li><?=$post['title']?></li>
<?endforeach?>
</ul>
Комментарии
отлично! уже применил :D
Как-то стиль Yii очень напоминает :-)
Не спорю очень удобно. Сам часто так делаю.
Вообще, достаточно функциональный шаблон MVC реализуется очень просто.
Сложнее всего дела обстоят с Front Controller и определения соответствия между URL и парой action/controller.
Вот вот, еще бы статейку про создание контролеров!
Боян, аналогичный код 100 раз везде обсасывался
Действительно, очень уж на yiiпохоже. Мне кажется, интереснее было бы если вы описали свою реализацию url manager'а из того же yii. То есть как из
собирать и разбирать урлы. Этот момент нигде в интернете не описан( А способ очень удобный. Заранее спасибо =)
Оставить комментарий