Я имею дело с плагином Shopware6 для платежного шлюза. Мне нужно обработать изменение состояния транзакции заказа. В одном из моих случаев я хотел бы предотвратить изменение состояния в Refunded
для транзакции заказа, когда я пытаюсь выполнить возмещение поставщику платежа и получаю сообщение об ошибке.
Нашел этот метод \Shopware\Core\System\StateMachine\StateMachineRegistry::transition
public function transition(Transition $transition, Context $context): StateMachineStateCollection
{
...
$repository->upsert($data, $context);
...
$this->eventDispatcher->dispatch(new StateMachineTransitionEvent(...));
...
$this->eventDispatcher->dispatch(...);
...
$this->eventDispatcher->dispatch(...);
...
}
где отправляется более одного события, но все они после upsert
.
Даже если я подниму исключение в подписчике этих событий, upsert уже обновил таблицу db, и у меня нет возможности отменить его, особенно потому, что состояние Refunded
не является состоянием выхода.
Как я могу предотвратить или отменить апсерт?