2017-04-07 1 views
0

I Validierungsregeln für das Modell haben alsValidierungsregeln Konflikt auf Modellszenarien yii

public function rules() 
{ 
    // NOTE: you should only define rules for those attributes that 
    // will receive user inputs. 
    //post of step 1 
    if (isset($_POST['yt0'])) 
    { 
     return array(
       array('EmailAddress,', 'required','message' => Yii::t('message', 'USERNAME_REQUIRED')), 
       array('Password,', 'required','message' => Yii::t('message', 'PASSWORD_REQUIRED')), 
       array('confirmPassword,', 'required','message' => Yii::t('message', 'CONFIRM_PASSWORD_REQUIRED')), 
       array('Password','length', 'max' => 100, 'min' => 6, 'tooShort' => Yii::t('message', 'PASSWORD_LENGTH')), 
       array('confirmPassword', 'compare', 'compareAttribute'=>'Password','message' => Yii::t('message', 'PASSWORD_COMPARE')), 
       array('EmailId,', 'required','message' => Yii::t('message', 'EMAILID_REQUIRED')), 
       array('EmailId','email','message'=>Yii::t('message', 'EMAILID_VALID')), 
       array('chapterCode,', 'required','message' => Yii::t('message', 'CHAPTERCODE_REQUIRED')), 
       array('verifyCode,', 'required','message' =>Yii::t('message', 'VERIFYCODE_REQUIRED')), 
       array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(),'caseSensitive'=>true,'message' =>Yii::t('message', 'VERIFYCODE_INCORRECT')), 
       array('EmailAddress', 'unique','className'=>'User','attributeName'=>'EmailAddress','message'=>Yii::t('message', 'EMAILID_UNIQUE')), 
       array('PersonId', 'unique','className'=>'User','attributeName'=>'PersonId','message'=>"Person already exists."), 
       array('FailedLoginCount', 'safe'), 
     ); 
    } elseif (isset($_POST['yt1'])) 
    { 
     return array(
       array('EmailAddress,', 'required','message' => Yii::t('message', 'USERNAME_REQUIRED')), 
       array('Password,', 'required','message' => Yii::t('message', 'PASSWORD_REQUIRED')), 
       array('FailedLoginCount', 'safe'), 

     ); 
    }elseif (isset($_POST['savecontact'])||$this->memBelongsto==0) 
    { 
     return array(
       array('EmailAddress,', 'required','message' => Yii::t('message', 'USERNAME_REQUIRED')), 
       array('Password,', 'required','message' => Yii::t('message', 'PASSWORD_REQUIRED')), 
       array('confirmPassword', 'required','message' => Yii::t('message', 'CONFIRM_PASSWORD_REQUIRED')), 
       array('Password','length', 'max' => 100, 'min' => 6,'tooShort' => Yii::t('message', 'PASSWORD_LENGTH')), 
       array('confirmPassword', 'compare', 'compareAttribute'=>'Password','message' => Yii::t('message', 'PASSWORD_COMPARE')), 
       array('EmailId,', 'required','message' => Yii::t('message', 'EMAILID_REQUIRED'),'except'=>'datavalid'), 
       array('EmailId','email','message'=>Yii::t('message', 'EMAILID_VALID'),'except'=>'datavalid'), 
       array('FailedLoginCount', 'safe'), 

     ); 
    }else{ 
     return array(
       array('EmailAddress,EmailId, Password', 'required'), 
       array('PersonId, ActiveFlag, FailedLoginCount', 'numerical', 'integerOnly'=>true), 
       array('EmailAddress, Password', 'length', 'max'=>100), 
       array('confirmPassword,', 'required','message' => Yii::t('message', 'PASSWORD_REQUIRED')), 
       array('Password','length', 'max' => 100, 'min' => 6, 'tooShort' => Yii::t('message', 'PASSWORD_LENGTH')), 
       array('confirmPassword', 'compare', 'compareAttribute'=>'Password','message' => Yii::t('message', 'PASSWORD_COMPARE')), 
       array('chapterCode,', 'required','message' => Yii::t('message', 'CHAPTERCODE_REQUIRED')), 
       array('verifyCode,', 'required','message' =>Yii::t('message', 'VERIFYCODE_REQUIRED')), 
       array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(),'caseSensitive'=>true,'message' =>Yii::t('message', 'VERIFYCODE_INCORRECT')), 
       array('FailedLoginCount', 'safe'), 
     ); 
    } 
} 

folgt und hier yt0 ist Name Taste auf Anmeldeseite äussern und so für die Registrierung der Regeln der yt0 werden angewandt, und ich habe ein anderes Formular für Passwort ändern, so auf dieser Seite Ich brauche nur drei Felder und die Schaltfläche zum Absenden für Passwort ändern ist savecontact und aber Savecontact Regeln angewendet werden, aber die Anmelde-Schaltfläche Regeln sind widersprüchlich, so dass die Validierung bei der Anmeldung nicht funktioniert. Ist es richtig zu richtigen Regeln wie oben irgendwelche Vorschläge bitte ....

Antwort

1

während dies funktionieren kann, tun Sie es in der falschen Vorgehensweise. Sie sollten scenario verwenden, um diese Art von Aufgaben durchzuführen.

Zunächst einmal können Sie Szenarien für Ihre verschiedene Formen erklären:

class User extends ActiveRecord 
{ 
    const SCENARIO_LOGIN = 'login'; 
    const SCENARIO_SIGNUP = 'signup'; 
    const SCENARIO_UPDATE = 'update'; 
} 

Wenn Sie mit der Definition Szenarien fertig sind, können Sie Ihr Modell sagen, was für massive Zuordnung zu verwenden, Attribute und gilt Validierung für die spezifischen Szenarien.

Jetzt, da Sie fertig sind, können Sie Validierungsregeln hinzufügen oder das Standardzeichen verwenden, das von gii generiert wurde.

class User extends ActiveRecord 
{ 
    const SCENARIO_LOGIN = 'login'; 
    const SCENARIO_REGISTER = 'register'; 
    const SCENARIO_UPDATE = 'update'; 

    public function scenarios() 
    { 
     return [ 
      self::SCENARIO_LOGIN => ['username', 'password'], 
      self::SCENARIO_REGISTER => ['email', 'username', 'password'], 
      self::SCENARIO_UPDATE => ['email', 'username', 'password'], 
     ]; 
    } 

    public function rules() 
    { 
     return ArrayHelper::merge([ 
      ['email' => 'email', 'message' => Yii::t('message', 'wrong email format')], 
      [['email', 'password', 'username'] => 'email'], 
      ['username', 'exist', 'on' => self::SCENARIO_LOGIN], // this will apply only on login 
      // other rules 
     ], parent::rules()); 
    } 
} 

Jetzt, da Sie mit Ihren Modellszenarien und -regeln fertig sind, sollten Sie sie richtig verwenden.

Head to Ihrem Controller und instanziiert Ihre Modelle, um die Szenarien:

public function actionLogin() 
{ 
    $model = new User(['scenario' => User::SCENARIO_LOGIN]); 

    if($model->load(Yii::$app->request->post())) { 
     // $model will have username and password even if email is in the form since it is using 
     // User::SCENARIO_LOGIN 
     $model->validate(); 
     // will validate only username and password even if email is in the form 
     // will also use the username exist validator 
     // do your stuff 
    } 
} 

public function actionRegister() 
{ 
    $model = new User(['scenario' => User::SCENARIO_REGISTER]); 

    if($model->load(Yii::$app->request->post())) { 
     // $model will have username, password and email 
     $model->validate(); 
     // will validate email, username and password but will not use the 
     // username exist validation rule since it has the `'on' => self::SCENARIO_LOGIN` 
     // do your stuff 
    } 
} 

Zum http://www.yiiframework.com/doc-2.0/guide-structure-models.html, um weitere Informationen darüber, wie richtig Modelle und Validierungen verwenden, um

+0

Dank Bruder für die Antwort und ich werde versuchen, diese und Ich werde fragen, ob irgendwelche Zweifel bestehen – rch