hrvasiliy: Если эти методы реализованы одинаково, нужны для всех контроллеров, которые наследуются от базового и скорее всего понадобятся для будущих его наследников, то да, можно смело выносить.
hrvasiliy:
1. Если есть методы, которые должны быть реализованы во всех контроллерах, то их логично было бы и вынести в базовый контроллер. Вообще вас никто не ограничивает, можно сколь угодно сложную иерархию контроллеров выстраивать. Главное, чтобы она была логичной, чтобы как можно реже приходилось переопределять методы в классах наследниках.
2. Эм... Не совсем понимаю, в чём проблема, и как это связано с основным вопросом? Вам про autoload и composer ведь известно?
3. По ситуации: в общие классы (кстати, не обязательно абстрактные) выносятся общие методы для всех классов-наследников. Трейты это по сути примеси, то есть в трейте можно объявить нужные методы, и добавлять их в любые классы буквально в пару строк. Получается что-то вроде альтернативы множественному наследованию.