В статических методах создаются записи, а когда возникает ошибка с отправкой 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'));
}
Код: Выделить всё
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;
}