Духовность™
Продвинутый новичок
компонентный подход, мвс и шаблоны
Всётаки я решил так-нибудь начать пропробовать писать на основе компонентного подхода (http://dklab.ru/chicken/nablas/16.html, 4 параграф). Т.е. основная идеология - шаблон вызывает контроллер, шаблон первичен. Причиной такого решения стала либо моя некомпитенция, а именно - отсутствие понимания того, как сделать контроллер независимым от внешнего вида конечной страницы. Т.е. грубо говоря, на одной странице может быть сколь угодно много разных блоков данных и процесс получения этих данных невольно приходится организовывать в основном контроллере, что лишает контроллера универсальности. Об этом яуже спрашивал, но ответы уважаемой публики меня так и не просветили.
Вот что я надумал: При запросе /news.html (запрос идёт конечно же не напрямую в news.html, а перенаправляется в index.php) инстанцируется View - класс-"шаблонизатор"-обертка. View инклюдит шаблон, в котором и инстанцируются все необходимые классы контроллеров, которые в свою очередь обращаются к моделям. Цепочка последовательностей примерно такая:
Как это возможно будет выглядеть на практике: активный шаблон news.html содержит примерно следующее:
После инстанцирования View, данный шаблон инклюдится в класс view и включается буферизация вывода, что бы была возможность отправлят заголовки, кидать исключения и т.д.
Чего думаете?
Всётаки я решил так-нибудь начать пропробовать писать на основе компонентного подхода (http://dklab.ru/chicken/nablas/16.html, 4 параграф). Т.е. основная идеология - шаблон вызывает контроллер, шаблон первичен. Причиной такого решения стала либо моя некомпитенция, а именно - отсутствие понимания того, как сделать контроллер независимым от внешнего вида конечной страницы. Т.е. грубо говоря, на одной странице может быть сколь угодно много разных блоков данных и процесс получения этих данных невольно приходится организовывать в основном контроллере, что лишает контроллера универсальности. Об этом яуже спрашивал, но ответы уважаемой публики меня так и не просветили.
Вот что я надумал: При запросе /news.html (запрос идёт конечно же не напрямую в news.html, а перенаправляется в index.php) инстанцируется View - класс-"шаблонизатор"-обертка. View инклюдит шаблон, в котором и инстанцируются все необходимые классы контроллеров, которые в свою очередь обращаются к моделям. Цепочка последовательностей примерно такая:
Код:
Запрос: View [обращение к>>> Controller [обращение к>>> Model
Ответ: View <<<отдает результат] Controller <<<отдает результат] Model
PHP:
<html>
<body ....>
<?
// контроллер новостей
$nc = new News_Controller();
$nc->run('view_news'); // вызвали какой-то метод контроллера новостей
$this->addData($nc->getData()); // добавляем во внутренне представление данные,
// сгенерированные контрллером News_Controller
// альтернативный вариант использования хелпера:
$this->addData( helper('News_Controller', 'view_news', $params=array()) );
?>
<!-- тут выводим новость -->
<? foreach($this->news_data as $news): ?>
<p><?=$news['content']?></p>
<? endforeach; ?>
<br><br><br><br>
<?
// контроллер чего-то ещё....
$oc = new Other_Controller();
$oc->run('other_action'); // вызвали какой-то метод контроллера новостей
$this->addData($oc->getData()); // добавляем во внутренне представление данные,
// сгенерированные контрллером Other_Controller
?>
<h1><?=$this->other_controller_data?></h1>
</html>
Чего думаете?