Вложенные транзакции и статические методы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

Вложенные транзакции и статические методы

Сообщение Chelobaka »

Здравствуйте, при использовании статических методов транзакции перестают работать.
В статических методах создаются записи, а когда возникает ошибка с отправкой email, не откатывается и получается что пользователь создан, контакты добавлены, а письмо с подтверждением не ушло((
Да, еще важный момент, catch ловит ошибку с отправкой!

Код: Выделить всё

 $transaction = User::getDb()->beginTransaction();

            try {
                $user = AuthService::signup($model);
                ContactService::create($user, $contacts);
                $model->sendEmail($user);
                Yii::$app->session->setFlash('success', Yii::t('app','Thank you for registration. Please check your inbox for verification email.'));                
                $transaction->commit();                  
                return $this->goHome();
            } catch(\Throwable $e) {
            	Тут ошибка с отправкой ловится!!!
                $transaction->rollBack();
                Yii::$app->session->setFlash('error', Yii::t('app', 'Something wrong'));
            }
AuthService::signup($model)

Код: Выделить всё

public static function signup(SignupForm $form)
    {
        $user = new User();
        $user->email = $form->email;
        $user->role = $form->role;
        $user->password_hash = self::generatePassword($form->password);
        $user->auth_key = self::generateAuthKey();
        $user->verification_token = self::generateEmailVerificationToken();

        $transaction = User::getDb()->beginTransaction();

        try {
            $user->save();
            $user_id = $user->getPrimaryKey();

            if ($user_id) {
                $roleName = User::getRbacRoleName($user->role);
                $userRole = Yii::$app->authManager->getRole($roleName);
                Yii::$app->authManager->assign($userRole, $user_id);
            } else {
                throw new ForbiddenHttpException(Yii::t('app', 'User don`t created.'));
            }

            $transaction->commit();
        } catch(\Throwable $e) {
            $transaction->rollBack();
            throw $e;
        }

        return $user;
    }
Ответить