2016-03-23 3 views
0

У меня есть форма регистрации в моем расширенном приложении Yii2. В моем приложении только администратор может регистрировать пользователей. Но когда я регистрирую нового пользователя, данные сеанса администратора уничтожаются и устанавливаются новые данные сеанса пользователя. Я пытаюсь не изменять данные сеанса при регистрации нового пользователя. Пользователю Admin все равно следует установить данные сеанса. Как решить эту проблему. Это мое действие в контроллере:Yii2 регистрация без сохранения данных сеанса

public function actionSignup() 
{ 
     $model = new SignupForm(); 

     if(Yii::$app->user->can('admin')) 
     { 
      if (($response = self::ajaxValidate($model)) !== false) 
       return $response; 

      if (self::postValidate($model)) 
      {     
       try 
       { 
        $trans = Yii::$app->db->beginTransaction(); 

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

        //tagidan tushgan odamining child_left, child_right tini o'zgartirish 
        $under = UserModel::findOne($user->id_parent_under); 

        if ($under->id_child_left == 0) 
         $under->id_child_left = $user->id; 
        else 
         $under->id_child_right = $user->id; 

        $under->update(false); 

        ChildrenBinaryModel::insertNewUser($user); 
        ChildrenClassicModel::insertNewUser($user); 

        $parents = ChildrenBinaryModel::find()->with('user')->where(["id_child" => $user->id])->orderBy(['depth' => SORT_ASC])->all(); 

        $c_user = $user; 
        foreach($parents as $p) 
        { 
         $p_user = $p->user; 

         if ($p_user->id_child_left == $c_user->id) 
          $p_user->ball_left += 100; 
         else 
          $p_user->ball_right += 100; 

         $p_user->update(false); 

         $c_user = $p_user; 
        } 

        $trans->commit(); 
       } 
       catch(\Exception $e) 
       { 
        $trans->rollBack(); 
        return $this->renderContent($e->getMessage()); 
       } 

       return $this->render('index'); 
      } 

      return $this->render('signup', [ 
       'model' => $model, 
      ]); 
     }else{ 
      throw new ForbiddenHttpException; 

     } 
    } 
+0

Обновите свой вопрос кодом. Как вы регистрируете пользователей? Покажите нам действие в вашем контроллере и любые методы вашей модели User, которые используются. – Clyff

+0

В моем действии все работает нормально. Я имею в виду, что данные будут добавлены в базу данных, и пользователь будет зарегистрирован при создании нового пользователя. Но, например, я хочу добавить пользователя по имени Джонни. Действие будет выполнено, а затем войти в систему на моем сайте будет Джонни, а не админ. Но я пытаюсь добиться того, что администратор должен быть зарегистрирован после добавления Johnny – Sherzod

ответ

0

Я решил эту проблему. Для того, чтобы ответить четко и просто я покажу вам действие по умолчанию Регистрация в контроллер узла (Yii2 расширенный шаблон):

public function actionSignup() 
    { 
     $model = new SignupForm(); 
     if ($model->load(Yii::$app->request->post())) { 
      if ($user = $model->signup()) { 
       if (Yii::$app->user->enableSession = false && 
        Yii::$app->getUser()->login($user)) { 
        return $this->goHome(); 
       } 
      } 
     } 

     return $this->render('signup', [ 
      'model' => $model, 
     ]); 
    } 

Только я сделал добавлял этот

Yii::$app->user->enableSession = false 

внутри если заявление

+0

Если вы решите установить enalbeSession на «false», нет необходимости делать это внутри, если (это приведет только к тому, что этот оператор никогда не произойдет). Кстати, посмотрите http://stackoverflow.com/questions/2063480/the-3-different-equals. И, глядя на ваш код, вам нужно только удалить попытку входа в систему, как сказал @ spencer4of6. – Clyff

0

Извлекает documentation для \yii\web\User::login(). Когда это выполняется в вашем коде, вызывая Yii::$app->getUser()->login($user), данные сеанса установлены в соответствии с вашим $user.

Если пользователь admin всегда регистрирует новых пользователей, я не уверен, что вам даже нужно запустить метод входа.

Смежные вопросы