Я бы не стал пихать транзакции везде, где этого не нужно.
Ну раз нужно, то да можно через события сделать, для этого они и предназначены.
Создайте для себя базовый контроллер и наследуйте его для всех остальных
public function init()
{
parent::init();
$this->on(Controller::EVENT_AFTER_ACTION,[$this,'onAfterAction']);
$this->on(Controller::EVENT_BEFORE_ACTION,[$this,'onBeforeAction']);
}
public function onAfterAction()
{
print "onAfterAction ";
}
public function onBeforeAction()
{
print "onBeforeAction ";
}