M - Модели - часто самый большой источник путаницы. Это те части вашего приложения, которые выполняют всю «тяжелую работу» - они обрабатывают доступ к базе данных, выполняют сложную логику для конкретного приложения и отвечают за большую часть того, что «делает» ваше приложение. В отличие от представлений и контроллеров, Zend Framework не имеет базового класса для моделей - это потому, что нет реальной согласованности в том, что они делают. Некоторые фреймворки (например, Ruby on Rails) пытаются представить какую-то оболочку базы данных в качестве основы для Model, но есть много случаев (сторонний фид / API, статические файлы, непостоянные вычисления, концепции, охватывающие несколько таблиц .. .) для которого это, в лучшем случае, вводящая в заблуждение практика. Модель - это часть приложения, в которой вы все еще вынуждены программировать, и фреймворк не может вас от этого спасти.
V - Представления - самые простые компоненты здесь. Это должны быть простые шаблоны PHP / HTML. Им дают объекты вида, массивы, строки и т. Д., Которые они затем помещают на страницу. Здесь не должно быть много (если есть) сложной логики - зациклите их, отобразите это (если определено), полоску зебры, эту таблицу и еще много чего. С помощниками View (например, помощником, который магически отображает Zend_Form
) происходит какая-то магия, но это не обязательно для понимания всей системы.
C - Контроллеры - В самом широком смысле контроллер отвечает за принятие пользовательских запросов, их отправку объектам модели и подготовку моделей для передачи в представления. Это клей, который скрепляет все вместе. Если вы используете Zend MVC, вам нужны 2 контроллера - Zend_Controller_Front
и Zend_Controller_Action
.
Zend_Controller_Front
(который вы получаете «бесплатно», если вы используете Zend_Layout::startMVC()
) - это единственная точка входа для вашего приложения - оно обрабатывает необработанные пользовательские запросы и переводит URL-адреса в действие для вызова. Есть несколько мест, где можно подключить этот модуль для обработки таких вещей, как аутентификация и ограничения доступа, но, по сути, это всего лишь «гаишник» на входе, направляющий входящие запросы.
Zend_Controller_Action
является базовым классом для действий - по сути, Action представляет собой то, что делает ваше приложение (войдите в систему, составьте список записей в блоге, запустите МБР, закажите пиццу ...), но не несет прямой ответственности за это на самом деле. , Контроллеры действий довольно скучны - они извлекают значения из форм и URL-адресов, вызывают несколько методов в классах модели, чтобы фактически выполнить действие, и выводят результаты в представление. Как уже было сказано, это «клей», который скрепляет Модели и Виды.
Грубый тест, чтобы увидеть, разделяете ли вы вещи по правильным линиям, состоит в том, чтобы представить существенное изменение вашего сайта. Визуальный редизайн будет почти полностью обрабатываться в представлениях. Перемещение всех ваших URL изменит ваши контроллеры. Преобразование из веб-приложения в приложение с графическим интерфейсом заменит представления и контроллеры, но ваша модель будет в основном неизменной. Если вы переписываете свои модели, у вас есть совершенно новое приложение.