2012-10-08 26 views

Trả lời

24

Bạn có thể thiết lập kiểm chứng thực mô hình của bạn như sau

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 liên kết tham khảo Để biết thêm chi tiết: http://www.yiiframework.com/wiki/56/

6

Bạn có thể tạo phương pháp xác nhận tùy chỉnh của bạn để đáp ứng yêu cầu của bạn.

Tạo một hàm trong lớp mô hình:

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'); 
} 

tài phương pháp xác nhận này trong các quy tắc:

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

Bạn có thể dễ dàng tìm thấy hoặc email là đã có trong db của bạn hay không bằng cách xác định quy tắc .

Đây là quy tắc.

array('xxx', 'unique', 'className' => 'SomeClass', 'attributeName' => 'SomeAttribute'), 

Ví dụ.

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

Ở đây tôi muốn đưa xác nhận vào Email, đó là duy nhất, tên lớp mô hình của tôi là dùng, AttributeName là tên trường của bảng bao gồm email và nếu email là đã có trong bảng của bạn sau đó hiển thị tin nhắn.

Nếu có lỗi, bạn có thể thay đổi bảng của mình và tạo trường duy nhất cho email.

ALTER TABLE người dùng ADD UNIQUE (email)

Sau đó kiểm tra.

xác thực email khác ở bên dưới. mà tôi nghĩ rằng bộ hoàn chỉnh xác nhận email.

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'), 
    ... 
); } 

Vậy đó. Cảm ơn

4

Xác thực tùy chỉnh, mã ngắn và ngọt. thử này nó làm việc tốt -

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'), 
     ); 
    } 

ghi chức năng tùy chỉnh này vào cùng một mô hình -

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

Đối Yii2 tôi đã sử dụng sau đây trong một mô hình gọi là ký mà sẽ sử dụng tài khoản Class.

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.'], 

    ]; 
} 

Bạn cần phải sử dụng targetClass và đặt Namepsace cho lớp tài

0

theo vài những sửa đổi như sau: Thực hiện theo tập tin của bạn theo mô-đun của bạn, bạn đã sử dụng.

Chuyển đến mô hình -> open-> Users.php -> Sửa đổi dòng như được đề cập bên dưới.

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

Bây giờ Tới views-> người dùng -> Open _form.php-> viết code như đã đề cập dưới đây

<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> 

Bây giờ Tới điều khiển -> mở UsersController.php -> wirte mã như đã đề cập dưới đây

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); 
      } 
} 

Cảm ơn bạn

Các vấn đề liên quan