Лично я стараюсь сосредоточить внимание контроллера на одном действии. Но он должен быть в состоянии сделать / вызвать все необходимое для завершения действия.
Например, у вас есть объект продукта. Для базового CRUD (я использую iCRUD, почему бы и нет?). Я бы создал 5 контроллеров: Index, Add, View, Edit, Delete (семантика, если вы используете Add / Create, View / Read и т. Д.).
Самый большой из них - это Edit, который должен «получить» существующий продукт, загрузить его в форму и вернуть его только для настройки страницы редактирования. По POST данных ему нужно будет получить существующий продукт, загрузить его в форму, получить данные запроса и загрузить его в форму, проверить, подготовить к хранению, сохранить и вернуть ответ.
Но я предпочитаю, чтобы он мог делать все это, но сосредоточил его на этом действии.
Вы можете, конечно, иметь все действия (i) CRUD в одном контроллере и все равно правильно применять MVC. Лично я считаю чище отделить их. В любом случае из пространства имен вы сможете определить, для какого класса вы смотрите.
Пример из проекта ниже:
По моему мнению, ясно, что здесь мы рассматриваем модуль User, подпространство имен контроллера, ориентированное на объект User. (В этом модуле есть братья и сестры для объекта User: Route, Role и т. Д.)
Должен сказать, что для этого есть как за, так и против.
Pro-х:
- Чисто и ясно, где вы должны быть для чего-то
- Разделение интересов
- Довольно СУХОЙ (не повторяйся)
- Простое повторное использование контроллеров действий для различных предметов (например, создание более абстрактного "ViewController" и реализация для каждого предмета: продукт, пользователь, адрес и т. Д.)
Con-х:
- Довольно СУХОЙ (не повторяйте себя) (посмотрите, что я там делал? Нужно сделать это с предварительной загрузкой форм и тому подобное)
- Дополнительная конфигурация в таких средах, как Zend Framework 3 (дополнительные комбинации Controller / Factory для регистрации)
- Дольше настраивается, рефакторинг "больше"