В предыдущей статье мы с Вами обсуждали проблему связки PHP и HTML . Я в конце той статьи сказал, что есть некоторые решения, которые немного исправляют ситуацию, однако, они не без недостатков. Так вот самый популярный из них - это подход MVC (Model-View-Controller) . И, на самом деле, данный подход является осново...

Подход MVC (Model-View-Controller)

В предыдущей статье мы с Вами обсуждали проблему связки PHP и HTML. Я в конце той статьи сказал, что есть некоторые решения, которые немного исправляют ситуацию, однако, они не без недостатков. Так вот самый популярный из них - это подход MVC (Model-View-Controller). И, на самом деле, данный подход является основой для всех остальных. Фактически, MVC ценен не своей "красотой решения", а прекрасной концепцией, к которой надо стремиться.

В основе MVC лежат 3 элемента: Модель, Шаблон и Контроллер. Давайте разберём каждый из них:

  • Шаблон (View) - это весь внешний вид страниц. Фактически, это набор HTML-файлов, каждый из которых отвечает за отдельную страницу. За Шаблон отвечает дизайнер.
  • Модель (Model) - это набор низкоуровневых функций. Например, по работе с базой данных, по аутентификации пользователей, по отправке e-mail сообщений и так далее. Другими словами, это служебные функции, реализация которых, вообще говоря, скрыта. За эту часть, безусловно, отвечает программист.
  • Контроллер (Controller) - это связующее звено между Шаблоном и Моделью. Сюда приходят данные из Шаблона (например, при отправке форм), сюда же приходит ответ от Модели, и именно Контроллер решает, какой шаблон выбрать. За Контроллер отвечает также программист.

На первый взгляд кажется, что это идеальная ситуация, так как мы, вроде бы, добились разделения работы программиста и дизайнера. Да и дизайн изменить легко, достаточно будет просто поменять Шаблон, никак не залезая в программную часть. Но, к сожалению, это далеко не так.

Предположим, нам надо вывести комментарии на страницу. Вот как это может выглядеть:

<?php
  require_once "model.php"; // Подключаем Модель
  $comments = getComments(); // Некая функция в Модели, возврающая двумерный массив с комментариями
  include "index.html"; // Вывод шаблона
?>

Вот кусок кода из index.html, где выводятся комментарии:

<?php
  for ($i = 0; $i < count($comments); $i++) {
    echo "<li><b>".$comments[$i]["name"].":</b> ".$comments[$i]["text"]."</li>";
?>

Остальная часть - это обычный HTML-код. Как видите, мы пытались избежать PHP-кода в Шаблоне, но у нас это не получилось. Простейший цикл завёл нас в тупик. Тоже самое будет, если потребуется какое-нибудь условие, и вновь без PHP не обойтись. Другой минус, не менее серьёзный, состоит в том, что именно Контроллер решает, какие блоки и выводить на странице. Хотя, что выводить, является задачей дизайнера, а не программиста.

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