Как покрыть транзакцией afterAction вместе с самим action в Yii2?

Есть базовый REST контроллер (свои контроллер наследник yii-шного), в котором есть beforeAction и afterAction. В afterAction есть логика записи лога в историю изменений (таблица в БД). При запросе DELETE что-то там в afterAction происходит ошибка (предположим). Требуется откатить изменение, которое произошло в DeleteAction при запросе. То есть, обеспечить полный откат всего запроса по БД. Как это сделать?

Сейчас есть в beforeAction:

$transaction = Yii::$app->db->beginTransaction();
$this->on(self::EVENT_AFTER_ACTION, [$transaction, 'commit']);

return parent::beforeAction($action);

В afterAction:

History::write(
    $this->historyTable,
    $entityId,
    $action->id,
    $historyData
);

DeleteAction - без изменений.

Получается, что если в afterAction базового класса (кастомный) случился exception, то запись удаляется, но ответ будет 500 с ошибкой. Нужно, чтобы запись не удалялась.


Ответы (0 шт):