2016-11-03 7 views
0

Im Projekt habe ich Probleme mit der Bestätigung des Passworts.Das Modell speichert nicht, wenn das Passwort in Yii2 bestätigt wurde.

Ich habe keine Bestätigung Passwort-Feld in meiner Datenbank, ich nehme an, das ist der Grund, dass ich diesen Fehler bekomme.

My Model

 public $user_password_hash_repeat; 
    public $agree; 
    public $user_search; 



// const SCENARIO_LOGIN = 'login'; 
    const SCENARIO_REGISTER = 'signup'; 
    const SCENARIO_CREATE = 'create'; 
    const SCENARIO_UPDATE = 'update'; 
    const SCENARIO_PASSWORD = 'password'; 
    const SCENARIO_NEWPASSWORD = 'newpassword'; 


    public static function tableName() 
    { 
     return 'sim_user'; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      [['user_email', 'user_fname'], 'required', 'on' => 'update'], // on Update Method scenario 
      [['user_email', 'user_fname', 'user_password_hash'], 'required', 'on' => 'create'], // on create method scenario 
      [['user_fname','user_email','user_password_hash','user_password_hash_repeat'], 'required', 'on' => 'signup'], // on signup scenario 
      [['user_password_hash'],'required' ,'on' => 'newpassword'],// repeat password scenario  
      ['agree','required','requiredValue' => 1,'message' => 'Tick the box', 'on' => 'signup'],// on signup scenario 
      ['user_password_hash','match','pattern'=>'$\S*(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*$','message'=>'Password must have atleast 1 uppercase and 1 number '], 
      ['user_password_hash', 'string', 'min' => 6], 
      ['user_password_hash_repeat', 'compare', 'compareAttribute'=>'user_password_hash', 'skipOnEmpty' => false], 
      [['user_email'],'email'], 
      [['user_company', 'user_suspended', 'user_deleted'], 'integer'], 
      [['user_email'], 'string', 'max' =>255], 
      ['user_email','unique','targetClass'=> '\app\models\SimUser','on'=> 'create'], //create method scenario for unique email 
      ['user_email','unique','targetClass'=> '\app\models\SimUser','on'=> 'signup'],// signup method scenario for unique email 
      ['user_email','unique','targetClass'=> '\app\models\SimUser','on'=> 'update'],//update method scenario for unique email 
      [['user_fname', 'user_lname'], 'string', 'max' => 45], 
      [['user_auth_key'], 'string', 'max' => 32], 
      [['user_access_token'], 'string', 'max' => 100], 
      ['user_email', 'exist', 'on' => self::SCENARIO_PASSWORD] 


     ]; 
    } 

Controller-Aktion

public function actionSignup() 
    { 
     $company = new Company(); 
     $model = new SimUser(['scenario' => SimUser::SCENARIO_REGISTER]); 
     if ($model->load(Yii::$app->request->post())&& $model->validate() && $company->load(Yii::$app->request->post())&& $company->validate()) { 
      // var_dump($model); exit() 
      $model->setPassword($model->user_password_hash); 
      $model->generateAuthKey();  
      // $company->save(); 

      $model->company_id = 1; 
       try{ 
        $model->save(); 
       }catch (Exception $ex) { 
        var_dump($ex->getMessage()); exit(); 
       } 

      if ($model->save()){ 
       $auth = Yii::$app->authManager; 
       $authorRole = $auth->getRole('staff'); 
       $auth->assign($authorRole, $model->user_id); 
      } 
      \Yii::$app->user->login($model); 
      return $this->redirect(['/site/index']); 
     } 

     return $this->render('signup', [ 
      'model' => $model, 
      'company' => $company, 

     ]); 
    } 

Wenn Sie die Regeln zu sehen, die ich user_password_hash_repeat gesetzt haben skipOnEmpty = false, das zwingt den Benutzer zu geben, dies zu sein Feld. Wenn ich das auf true setze und einfach das Passwort eintippe und abschicke, übergibt es das Formular und speichert das Modell erfolgreich.

Ich habe auch versucht, die für das user_password_hash_repeat erforderlich, ich am Ende nicht in der Lage, das Modell zu speichern.

Was ist falsch in meinen Regeln Setup?

Vielen Dank !!

+0

Welchen Fehler bekommen Sie? –

+0

Ich erhalte keinen Fehler, es speichert einfach nicht mein Modell ... –

+0

Versuchen Sie '$ model-> scenario = 'signup';' vor dem Speichern Ihres Modells zu verwenden. –

Antwort

0

Es scheint, dass Sie fehlen zweiten Parameter von load model, übergeben leere Zeichenfolge als zweiter Parameter.

Ersetzen Sie diese

$model->load(Yii::$app->request->post()) 

Mit diesem

$model->load(Yii::$app->request->post(), '') //Note: Pass second parameter as empty string 

so Ihre if Zustand dies funktioniert wie

if ($model->load(Yii::$app->request->post(),'')&& $model->validate() && $company->load(Yii::$app->request->post(),'')&& $company->validate()) { 

Hoffnung aussehen würde.

+0

Ich habe them..when Ich füge diese es das Formular abschickt, aber nicht alles speichern und die gleiche Seite macht wieder .. es nicht einmal meine Seite nicht umleiten –

Verwandte Themen