@ProFM

Как в yii2 сделать редирект после регистрации пользователя?

Добрый день!
Не могу никак понять что происходит с Yii2..... Пока еще только учусь, поэтому сильно не сердитесь на меня.

Брал код с другого сайта, работал он хорошо, человек регистрировался, вводил данные, нажимал кнопку, и его редиректило на главную страницу и сразу авторизовывало, вот такой код был:

SignupForm
public function signup()
    {
        if (!$this->validate()) {
            return null;
        }

        $user = new User();
        $user->username = $this->username;
        $user->email = $this->email;
        $user->setPassword($this->password);
        $user->generateAuthKey();
        return $user->save() ? $user : null;

SiteController
public function actionSignup()
    {
        $model = new SignupForm();
        if ($model->load(Yii::$app->request->post())) {
            if ($user = $model->signup()) {
                if (Yii::$app->getUser()->login($user)) {
                    return $this->goHome();
                }
            }
        }
        return $this->render('signup', [
            'model' => $model,
        ]);
    }


Все отрабатывало отлично. Потом мне потребовалось добавить роль в таблицы RBAC при регистрации, помог мне Максим Тимофеев за что я ему очень благодарен, все добавлялось в БД и в user и в RBAC, код выглядел так:

SignupForm
public function signup()
    {
        if (!$this->validate()) {
            return null;
        }

        $user = new User();
        $user->username = $this->username;
        $user->email = $this->email;
        $user->setPassword($this->password);
        $user->generateAuthKey();
        if($user->save()){
            $role = Yii::$app->authManager->getRole('user');
            Yii::$app->authManager->assign($role, $user->id_user);
        }
    }


Ну и в SiteController без изменений. В итоге перестал работать редирект, и я так понял, что скрипт не заходит в этот кусок кода

if ($user = $model->signup()) {
   if (Yii::$app->getUser()->login($user)) {
       return $this->goHome();
   }
}


а вот так редиректит нормально на главную, но не авторизовывает пользователя.

if ($user = $model->signup()) {
    if (Yii::$app->getUser()->login($user)) {
          return $this->goHome();
     }
}
return $this->goHome();


т.е. обходит мимо первую часть кода.

Помогите пожалуйста, очень хочется разобраться, сделать хороший сайт, но пока тяжело все доходит. Сильно не бейте
  • Вопрос задан
  • 544 просмотра
Решения вопроса 1
@ProFM Автор вопроса
Короче, как всегда, такую глупость сделал.....не добавил return в модели формы.......Написал тут, посмотрел еще раз и все дошло, простите за беспокойство.

Если кому то нужен будет ответ, то вот он, нужно было добавить просто return в
SignupForm
public function signup()
    {
        if (!$this->validate()) {
            return null;
        }

        $user = new User();
        $user->username = $this->username;
        $user->email = $this->email;
        $user->setPassword($this->password);
        $user->generateAuthKey();
        if($user->save()){
            $role = Yii::$app->authManager->getRole('user');
            Yii::$app->authManager->assign($role, $user->id_user);
        }
        return $user;
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
А Вы ничего не возвращаете в методе signUp(), поэтому и не работает.
Сравните то что было, с тем что сейчас у Вас.
В первом варианте Вы возвращали
return $user->save() ? $user : null;
Во втором варианте Вы ничего не возвращаете
if($user->save()){
            $role = Yii::$app->authManager->getRole('user');
            Yii::$app->authManager->assign($role, $user->id_user);
        }

Попробуйте сделать так
if($user->save()){
    $role = Yii::$app->authManager->getRole('user');
    Yii::$app->authManager->assign($role, $user->id_user);
     return true;
}
else{
  return false;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы