Модель-Представление-Контроллер (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. Действие завершает формирование представления и выводит результат пользователю.