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

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

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

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

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

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

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

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

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

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

  

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

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

  

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

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

  

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

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