Первое что пришло в голову - вынести все в отдельный виджет, сделать папочку components (или любую другую как вам удобнее), и в ней просто сделать свой виджет.
А затем уже его цеплять на необходимых страницах.
Ведь ваш собственный виджет может без проблем использовать собственные контроллеры и представления, и точно так же и как и любой экшн отдавать на отрисовку представление.
Единожды описав виджет, вы просто подцепляете его везде где надо, примерно так
<?= \app\components\NewsWidget::widget(['param' => 'index']) ?>
Данная строка у меня вызывает у меня везде где я ее пропишу блок со списком последних новостей, статистику по количеству новостей (старые, новые, непрочитанные). Виджет имеет собственный контроллер и собственное представление. Модели для виджета спокойно можно использовать уже существующие, либо опять же, добавить свои.
Вариант номер 2 - если у вас много повторяющего кода, вынесите его в модель, и вызывайте его как событие перед рендерингом страницы, т.е. грубо говоря своеобразная middleware. Думаю тут необходимо будет дополнительно почитать про поведение.