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>
Комментарии RSS по email OK
отлично! уже применил :D
Как-то стиль Yii очень напоминает :-)
Не спорю очень удобно. Сам часто так делаю.
Вообще, достаточно функциональный шаблон MVC реализуется очень просто.
Сложнее всего дела обстоят с Front Controller и определения соответствия между URL и парой action/controller.
Вот вот, еще бы статейку про создание контролеров!
Боян, аналогичный код 100 раз везде обсасывался
Действительно, очень уж на yiiпохоже. Мне кажется, интереснее было бы если вы описали свою реализацию url manager'а из того же yii. То есть как из
собирать и разбирать урлы. Этот момент нигде в интернете не описан( А способ очень удобный. Заранее спасибо =)
Очень интересно, недавно сам начал изучить только фреймворки, спасибо.
Гут
Полезненько!
Спасибо, наглядно, искал именно это) Опечатка через весь пост тащится - "отренедеренный", нужно "отрендеренный", иначе путает очень.
Спасибо за статью.
Поправил опечатку. Спасибо.
Непонятно пишете, как 80% авторов. Упускаете много нюансов, для понимания. Не понял ничего.