Модель-Представлення-Контролер  (MVC)
======================================

Yii використовує шаблон проектування Модель-Представлення-Контролер (MVC, Model-View-Controller),
який широко використовується у веб-програмуванні.

MVC спрямований на відділення бізнес-логіки від користувальницького інтерфейсу, 
щоб розробники могли легко змінювати окремі частини додатку, не задіваючи інші.
В архітектурі MVC модель надає дані і правила бізнес-логіки, представлення відповідає за користувальницький
інтерфейс (наприклад, текст, поля вводу), а контролер забезпечує взаємодію між моделлю та представленням.

Окрім цього, Yii також використовує фронт-контролер, який називається додатком (application),
який інкапсулює контекст обробки запиту. Додаток збирає інформацію
про запит та передає його для подальшої обробки відповідному контролеру.

Наступна діаграма відобража структуру додатку Yii:

![Статична структура додатку Yii](structure.png)


Типова послідовність роботи додатку Yii
-------------------------------------------------

Наступна діаграма описує типову послідовність процесу обробки користувальницького запиту додатком:

![Типова послідовність роботи додатку Yii](flow.png)

   1. Користувач здійснює запит за допомогою URL `http://www.example.com/index.php?r=post/show&id=1`,
а веб-сервер обробляє його, запускаючи виконання скрипта ініціалізації `index.php`;
   2. Скрипт ініціалізації створює екземпляр [додатку](/doc/guide/basics.application) та запускає його на виконання;
   3. Додаток отримує детальну інформацію про запит користувача 
від [компонента додатку](/doc/guide/basics.application#application-component) `request`;
   4. Додаток визначає запитані [контролер](/doc/guide/basics.controller)
та  [дію](/doc/guide/basics.controller#action) за допомогою компоненту `urlManager`.
У даному прикладі контролером буде `post`, який відноситься до класу `PostController`, 
а дією — `show`, суть якого визначається контролером;
   5. Додаток створює екземпляр запитуваного контролеру для подальшої обробки запиту користувача. Контролер визначає
відповідність дії `show` методу `actionShow` у класі контролера.  Далі створюються та застосовуються фільтри
(наприклад, access control, benchmarking), повʼязані з даною дією, та, якщо фільтри дозволять, дія виконається;
   6. Дія зчитує із бази даних [модель](/doc/guide/basics.model) `Post` з ID рівним `1`;
   7. Дія формує [представлення](/doc/guide/basics.view) `show` із даними моделі `Post`;
   8. Представлення отримує та відображає атрибути моделі `Post`;
   9. Представлення виконує деякі [віджети](/doc/guide/basics.view#widget);
   10. Сформоване представлення додається у [макет сторінки](/doc/guide/basics.view#layout);
   11. Дія завершує формування представлення та виводить результат користувачу.