2012-10-08 16 views

cevap

24

Sen Daha Detay için

public function rules() 
{ 
    // NOTE: you should only define rules for those attributes that 
    // will receive user inputs. 
    return array(
      //First parameter is your field name of table which has email value 
     array('email', 'email','message'=>"The email isn't correct"), 
     array('email', 'unique','message'=>'Email already exists!'),    
    ); 
} 

Yii Referans Linki aşağıda modeliniz doğrulamaları ayarlayabilirsiniz: http://www.yiiframework.com/wiki/56/

6

Sen şartı yerine getirmek için özel doğrulama yöntemi oluşturabilirsiniz.

modeli sınıfında bir işlev oluşturun: kurallarda

public function uniqueEmail($attribute, $params) 
{ 
    // Set $emailExist variable true or false by using your custom query on checking in database table if email exist or not. 
    // You can user $this->{$attribute} to get attribute value. 

    $emailExist = true; 

    if($emailExist) 
    $this->addError('email','Email already exists'); 
} 

Kullanıcı bu doğrulama yöntemi: Kolayca bulabilirsiniz ya e-posta kuralı tanımlayarak zaten db mevcut olup olmadığını

array('email', 'uniqueEmail','message'=>'Email already exists!'),  
3

.

Kural şudur. Örnek. Örnek.

public function rules() { 
    return array(
    ... 
    array('email', 'unique', 'className' => 'User', 'attributeName' => 'email', 'message'=>'This Email is already in use'), 
    ... 
); 
} 

İşte ben tektir Email, üzerinde doğrulama koymak istiyorum, benim modeli sınıf adı Kullanıcı olduğunu attributeName tablonun yani e-postalar alan adıdır ve e-posta tablonuzda zaten varsa o zaman mesaj görüntüleyebilir.

Hata veriyorsa, tablonuzu değiştirebilir ve e-posta alanını benzersiz hale getirebilirsiniz.

ALTER tablo kullanıcı UNIQUE (e-posta) ADD

Sonra kontrol edin.

diğer e-posta doğrulamaları aşağıdadır. hangi e-posta doğrulama tam set düşünün.

public function rules() { 
    return array(
    ... 
    array('email', 'required'), 
    array('email', 'length', 'max'=>200), 
    array('email', 'email', 'message'=>'Email is not valid'), 
    array('email', 'unique', 'className' => 'User', 'attributeName' => 'email', 'message'=>'This Email is already in use'), 
    ... 
); } 

İşte bu kadar. Teşekkürler

4

Özel doğrulama, kısa ve tatlı kod. düzgün şekilde çalışıyorsa bu deneyin -

public function rules() 
    { 
     return array(
      array('email, first_name, last_name, password, repeat_password', 'required'), 
      array('email', 'email','message'=>"The email isn't correct"), 
      array('email', 'uniqueEmail'), 
     ); 
    } 

yazma Bu özel işlevi aynı modele -

public function uniqueEmail($attribute, $params) 
    { 
     if($user = User::model()->exists('email=:email',array('email'=>$this->email))) 
      $this->addError($attribute, 'Email already exists!'); 
    } 
4

Yii2 ben Kullanıcı Class kullanacak Kayıt adında bir modelde aşağıdaki kullandı. Kullandığınız sizin modül başına Dosyanızı takip edin:

public function rules() 
{ 
    return [ 

     ['Email', 'filter', 'filter' => 'trim'], 
     ['Email', 'required'], 
     ['Email', 'email'], 
     ['Email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This email address has already been taken.'], 

    ]; 
} 

Sen targetClass kullanmak ve Sınıf Kullanıcı

0

için Namepsace koymak aşağıda bazı değişiklikler takip gerekir.

Modellere git -> open-> Users.php -> Aşağıdaki gibi satırı değiştirin.

public function rules() 
    { 
     return [ 
       [['User_Email'], 'unique'], 
       [['User_Mobile'],'unique'], 
       ]; 
    } 

Şimdi> views- kullanıcıları git -> Aç _form.php-> kod yazmak Şimdi Kontrolör git

<div class="users-form"> 

    <?php $form = ActiveForm::begin([ 
      'id' => $model->formName(), 
      'enableAjaxValidation' => true, 
     ]); ?> 

<?= $form->field($model, 'User_Email')->textInput(['maxlength' => true])?> 
<?= $form->field($model, 'User_Mobile')->textInput(['maxlength' => true])?> 
    <div class="form-group"> 
      <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
     </div> 

     <?php ActiveForm::end(); ?> 

    </div> 

aşağıda belirtildiği gibi -> UsersController.php'yi açın -> aşağıdaki kodyu belirtin werte

public function actionCreate() 
    { 
     if(Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())){ 
      Yii :: $app->response->format = 'json'; 
      return \yii\bootstrap\ActiveForm::validate($model); 
      } 
} 

size

ederiz
İlgili konular