Некоторые вещи такого рода зависят от предпочтений и мнений; нет единственно верного пути. Некоторые подходы могут быть более гибкими, но, возможно, за счет того, что они более сложные.
Что касается вашего примера "голосования", это может зависеть от того, как будет использоваться голосование на вашем сайте. Будут ли голоса появляться на страницах разных типов? Если так, какой-то компонент является хорошим подходом; представление компонента голосования может затем использоваться для отображения его данных на разных страницах, при этом контроллер компонента голосования принимает результаты голосования, а затем, возможно, перенаправляет его куда-то еще (или принимает голоса по запросу Ajax).
Очень часто вы обнаруживаете, что модели (и контроллеры) более или менее соответствуют 1: 1 таблицам в базе данных. Поэтому, если у меня есть таблица users
, у меня может быть соответствующая модель User
и контроллер UserController
.
Помните, для чего предназначен контроллер: ответьте на запрос, определите, какие модели необходимо загрузить, затем попросите их сохранить, манипулировать и вернуть данные, которые затем передаются в представление для отображения. Хорошо иметь контроллеры, которые не отображаются напрямую на модели. У вас может быть контроллер с именем DebugController
, который отвечает на запросы к http://examples.com/debug/
и не отображается непосредственно на модель и таблицу Debug
, но собирает информацию о системе и различных моделях (конечно, есть аргумент что все эти вещи должны быть объединены в модель Debug
, которая, в свою очередь, загружает другие модели и собирает данные, которые запрашивает контроллер).
Что касается представлений, у вас обычно будет несколько представлений для данного контроллера; часто один просмотр за действие . Так что UserController::indexAction()
имеет views/user/index.php
, UserController::editAction()
имеет views/user/edit.php
и т. Д.