Почему в контроллерах MVC-фреймворков на PHP несколько действий?
==================================================================

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

В связи с этим возникает вопрос: зачем объединять несколько действий в один класс? Почему бы не сделать все действия одиночными? Единственная причина, которую я сейчас вижу (по крайней мере, в Yii, который я использую), — желание разместить сходные по тематике действия в одном контейнере. 

 разделять action'ы - это экономия на спичках и противоречие инкапсуляции. там у вас помимо этого столько всего инициализируется, что один лишний метод в контроллере - вообще ни о чем. 

 Обычно это просто удобно, так как в одном контроллере можно разместить действия с одной сущностью, либо объединить их по какому-то другому признаку. Бывает, что несколько экшнов юзают общий приватный метод, который нет смысла выносить в отдельный сервис, и дублировать между файлами не хочется.  

В случае вытягивания зависимостей контроллера из контейнера выигрыша от разделения контроллера на экшны нет, от слова "совсем".  

Если же зависимости контроллера вставляются через DI - выигрыш будет в том, что не нужно будет пробрасывать зависимости не нужные конкретно в этом экшне, а так же упростится unit тестирование. 

 Реальная причина, почему каждый рут выносят в отдельный контроллер - это тестируемость кода. Т.е. если условно класс содержит 5 рутов, для каждого рута требуется какой-то отдельный сервис с логикой, плюс какой-то вспомогательный (эвентДиспатчер итд), то потом все это тестировать очень сложно.   
  

Если зависимостей мало, либо они все идут в один подсервис, то можно запихать все в один класс в разные экшины - почему нет. 

> зачем объединять несколько действий в один класс? Почему бы не сделать все действия одиночными? Единственная причина, которую я сейчас вижу (по крайней мере, в Yii, который я использую), — желание разместить сходные по тематике действия в одном контейнере 

  

Потому что практически все фреймворки используют ООП, а MVC здесь ни при чем. Заменить все методы классами бредовая фантазия, и дело не в более мелком дроблении или сборке схожего вместе, между объектом и методом принципиальная разница. Контроллер такой же объект, его экшены - методы этого объекта. Сколько у объекта методов зависит от его логики, а не от деления данных (может 1, может 10, а может 0). 

> что тратит дополнительные ресурсы

  

Ты переживаешь за несколько байт в памяти сервера? Не парься.  
  

> зачем объединять несколько действий в один класс?

  

Что-бы ПОТОМ было интуитивно понятно где нужный экшен искать. Это как полки в библиотеке - быстрее найти книгу по номеру полки чем под каждую индивидуальную книжку делать полочку.