Войти Регистрация

MVC PHP: Понятие, преимущества, пример


В данной статье мы разберемся с понятием MVC, и как, на примере, можно применить это в PHP.

Понятие MVC

MVC(Model-view-controller, «Модель-представление-поведение», «Модель-представление-контроллер») — это шаблон проектирования приложений, при котором управляющая логика поделена на три отдельных компонента таким образом, что модифицирование одного из них дает минимальное влияние на остальные.

Шаблон MVC хорошо применять при создании сложных проектов, где необходимо отделить работу php программиста (или разделить группу программистов на отделы), дизайнера, верстальщика, и т.д.

Шаблон MVC разделяет представление, данные, и обработку действий пользователя на три отдельных компонента:

MVC Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контроллера), изменяя своё состояние.

MVC Представление (View). Отвечает за отображение информации (пользовательский интерфейс).

MVC Поведение (Controller). Интерпретирует данные, введённые пользователем, и информирует модель и представление о необходимости соответствующей реакции.

Для наглядности схемы действия шаблона MVC, ниже предоставлена иллюстрация.

Такие компоненты как представление и поведение зависят от модели, но никак не влияют на нее. Модель может иметь несколько представлений. Может быть, концепция MVCсложная для понимания, но если ее осмыслить, она становиться незаменимой при разработке приложений на PHP.

MVC в PHP

Особенностью при использовании MVC в PHP, является то, что существует одна точка входа в php приложение, которая, например, достигается следующим образом. Создается index.php через который будут обрабатываться все запросы, для этого создаем в папке с индексом файл .htaccess и помещаем в него такой код:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

В предоставленном коде, первой строкой, проверяется существование запрашиваемого файла, и если его нет, то идет перенаправление на index.php, иначе даже запросы картинок сайта будут перенаправляться на индекс. Последняя строка кода преобразовывает запросы вида index.php?route=chat/index у вид index.php/chat/index. Если у вас нет возможности использовать ModRewrite в своем приложении, то вам придется делать переадресацию вручную.

PHP Модель

Данные о PHP модели содержаться в ее атрибутах и могут быть изменены только через специальные функции. Модель может содержать в себе несколько представлений. Как правило, phpмодель это класс работающий с БД, конкретнее: запись, чтение, удаление. Естественно чтение информации с БД может быть реализовано несколькими представлениями (функциями). Как пример модель статей на сайте: можно получить конкретную статью из БД, список последних, популярных, какой-то категории… это все представления модели. Для наглядности ниже предоставлен пример php модели.

<?php

function methodName()

{

$link = mysql_connect(’localhost’, ‘mysql_user’, ‘mysql_password’);

if (!$link) {

die(’Could not connect: ‘ . mysql_error());

}

echo ‘Connected successfully’;

mysql_close($link);

$query_results= mysql_query(’select * from searchNames order by firstname desc’);

 

$data = array();

while ($row = mysql_fetch_objects($query_results)) {

$data[] = $row;

}

return $data;

}

?>

PHP контролер (Поведение)

PHP контролеры получают запросы пользователей, которые мы направляли через index.php, и в соответствии с ними, корректируют работу модели. Правильнее сказать контролируют работу php приложения.

<?php

$data= methodName();

display_template(’data.tpl’);

?>

PHP Представление

Представление отслеживает изменение в модели и создает или меняет интерфейс php приложения.

<html>

<body>

<h1>List of Datas</h1>

<?php foreach ($data as $row) { ?>

<h2><?php echo $row->firstname ?></h2>

<h2><?php echo $row->lastname?></h2>

<?php } ?>

</body>

</html>

Как работает данный PHP MVC шаблон?

При обращении пользователем по нужному url выбирается соответственный контролер, который обращается к представлению и модели, и выводится информация. Другими словами контролер в mvc есть связующим звеном модели и представления.

Преимущества MVC шаблона при создании PHP приложения

Как упоминалось выше это, прежде всего дифференциация разработчиков php сайта на отделы. Также увеличивается скорость работы php приложения, если создается крупный проект. Ну и то, что касается непосредственно самого php разработчика, это правильная структуризация php кода (все на своих местах, так легче для понимания).

MVC пример

Особо не будем зацикливаться на примере работы MVC, так как уже имеется пример mvc на php. Добавлю лишь еще пару схем для более глубокого понимания.

Еще одна схема работы MVC шаблона на PHP, она более чем доступна для понимания.

php mvc: контролер, модель, представление

Теперь можно сказать, что понятие mvc раскрыто. Если вы впредь не использовали MVC шаблон при организации создания вашего проекта, то советую вам не медлить с применением полученных знаний. Если еще сомневаетесь – читайте пункт преимущества mvc шаблона. Если же имеете практические предложения по поводу использования mvc в php, просьба высказаться в комментариях.



Дальше: Сворачивание и разворачивание блока на javascript


Дискуссия по теме    22 Комментария 
Добавить комментарий
Остап 26.07.2015 в 21:09
Спасибо за объяснение. Ну никак не мог вьехать из пары статей, а с этой сразу. А все дело в названиях составляющих архитектуры. Например, модель - что это и почему оно так называется? Вызывает совсем другие ассоциации. А так грубо говоря как я только что понял: модель - логика, обработчик, главный код; контроллер - связуещее звено, вход на обработку и выход обработанных данных; представление - вьюха, шаблон, интерфейс взаимодействия с пользователем, содержит минимум кода или не содержит его вообще! Спасибо!
MrMichel 05.10.2014 в 13:02
Хотелось бы подробностей: Где происходит например валидация данных от пользователя ? Что делать если модели имеют частично одинаковые функции ? Можно ли использовать контроллером не свои виды и модели и причем использовать часть моделей например?
Семён 02.10.2014 в 10:45
Может есть смысл заменить "display_template" на include, ну или какую-нибудь встроенную функцию, чтобы народ не путать. Я первым делом после прочтения, начал искать функцию "display_template" в офф. описании. Как я понимаю, вы используете её в каком-то фреймворке, на который не ссылаетесь... И она для данной статьи не к месту.
piter 23.06.2014 в 15:19
Спасибо!
Михаил 20.05.2013 в 11:44
Статья для новичков с уже имеющимся опытом разработки сайтов в самый раз, а кто хочет/может, тот пойдет дальше вникать в тему MVC.
дмитрий 04.05.2013 в 17:04
Честно скажу статья хорошая, только вот подробностей мало. Не свсем понятна взаимо связь модулей в mvc. Кто кому какие данные передает, и сколько должно быть контролеров - все лепить в один или можно создать неограниченое количество и для удобства.В каком модуле проверка прав пользователя для просмотра контента или действий над ним.Представление имею как это все работает и как это реализовать - но стандарты несовсем ясны.И примерв очень мало - не блок схем а примеров в исходниках.
Максим 15.02.2013 в 10:56
Просто ужас, других слов нет. Ни код чистым не назвать, ни русский русским не назвать.
Никита 12.08.2012 в 01:14
розшифровка убила)
Тарас 12.08.2012 в 13:08
Какая расшифровка?
Пользователь 26.08.2012 в 20:34
Розшифровка - опечатка в изображении, после текста " Еще одна схема работы MVC шаблона на PHP, она более чем доступна для понимания" (розшифровка действий), мне тоже резануло глаза.
Дмитрий 09.07.2012 в 14:37
Не совсем понятно, что должно находится в display_template(’data.tpl’), можно чуть поподробнее. Спасибо.
Тарас 09.07.2012 в 15:56
После получения данных из модели, контролер подключает вид в который пересылает эти данные... этой строкой мы подключаем конкретный вид (т.е. шаблонный файл в котором храниться только дизайн и места для вставки информации из БД). Видов можно подключать несколько, например: шапку сайта, сайдбар, центр и подвал... как угодно, кто как привык.
Алексей 28.06.2012 в 23:37
Я может еще совсем зеленый, но разве можно делать запрос к базе после того, как соединение с базой закрыто?
Тарас 29.06.2012 в 01:22
Да, вы правы, там нужно поменять местами строки...
Denisszz 03.06.2012 в 05:07
все пучком. много статей про преализацию MVC в PHP, но нигде нету вступления. Хорошее вступление. Можно было бы на рисунках более подробно логику описать.
Pavel 26.05.2012 в 16:58
Отличная статья, изложено кратко и ясно. Спасибо!
roc 23.05.2012 в 13:21
Вопрос на счет вида (представления) ... <h1>List of Datas</h1> <?php foreach ($data as $row) { ?> ... От куда берутся там переменные, к примеру $data? Они глобальные? В самом шаблоне вида ни каких действий со значениями не происходит, они там просто выводятся?
Тарас 26.05.2012 в 00:21
data это массив, в него пишуться данные из БД, через модель.... контроллер обращаеться к модели, чтобы получить этот массив и подключает вид tpl, в который его передает... в виде, мы имеем массив с данными, которые выводим где нам угодно.
Lixoradka 16.05.2012 в 13:43
С принципами MVC знаком из ASP.NET MVC 3. Поэтому от статьи ожидал того, что объяснится как тоже самое реализовать на php. Из прочитанного не вынес нового ничего.
Василий 06.05.2012 в 15:34
Статья ниочем. Примеров мало, все написанное итак очивидно.
Тарас 07.05.2012 в 17:41
Я рад что вы понимаете архитектуру mvc... но многие вообще не понимают этой концепции. Цель данной статьи, доступно объяснить что это такое... или что вы хотели увидеть?
Денис 17.12.2011 в 20:15
Да, сейчас переделиваю свой сайт под MVC.
Добавить комментарий
Просмотров: 60591