수색…


Yii2에서 데이터베이스의 고유 한 값 확인

기존 값이 텍스트 상자에 입력되면 오류 메시지가 표시되지 않는 문제는 거의 없습니다.

예를 들어 사용자가 기존 이메일 을 입력 하도록 허용하지 않습니다 .

signup.php

(기존 이메일 ID없이 새 사용자를 등록하려는 페이지)

  1. use yii\bootstrap\ActiveForm; 제거하십시오 use yii\bootstrap\ActiveForm; (있는 경우)
  2. use yii\widgets\ActiveForm; 추가하십시오 use yii\widgets\ActiveForm;
  3. 'enableAjaxValidation' => true 추가하십시오 (사용자가 기존 이메일 ID를 입력하는 것을 중단하려는 필드에서).
<?php
use yii\bootstrap\ActiveForm;
use yii\widgets\ActiveForm;
?>

<?= $form->field($modelUser, 'email',['enableAjaxValidation' => true])
    ->textInput(['class'=>'form-control','placeholder'=>'Email']); ?>

제어 장치

상단에 다음 줄을 추가하십시오 use yii\web\Response;use yii\widgets\ActiveForm;

<?php
use yii\web\Response;
use yii\widgets\ActiveForm;

  .
  .// Your code
  .

  public function actionSignup() {
    
    $modelUser = new User();

    //Add This For Ajax Email Exist Validation 
    if(Yii::$app->request->isAjax && $modelUser->load(Yii::$app->request->post())){
      Yii::$app->response->format = Response::FORMAT_JSON;
      return ActiveForm::validate($modelUser);
    } 
    else if ($model->load(Yii::$app->request->post())) {
      
    }
    
  }
?>

모델

[['email'],'unique','message'=>'Email already exist. Please try another one.'],

데이터베이스에서 고유 한 값 확인 : 고유 한 유효성 검사

일부 사람들은 기존 값을 입력 할 때 표시되지 않는 오류 메시지와 관련된 문제가 있습니다. 예를 들어 기존 이메일에 사용자 가입을 허용하지 않습니다.

전망

<?php
......................    
    
    <?= $form->field($modelUser, 'email')->textInput(['class'=>'form-control','placeholder'=>'Email']) ?>
......................    

제어 장치

<?php
use yii\web\Response; // important lines
use yii\widgets\ActiveForm; // important lines
        
.
.// Your code
.
        
public function actionSignup() 
{
            
    $modelUser = new User();
        
    //Add This For Ajax Validation 
    if(Yii::$app->request->isAjax && $modelUser->load(Yii::$app->request->post())){
        Yii::$app->response->format = Response::FORMAT_JSON;
        return ActiveForm::validate($modelUser);
    } 
    if ($modelUser->load(Yii::$app->request->post()) && $modelUser->save()) {
        return $this->redirect(['someplace nice']);
    }
    return $this->render('update', [
        'modelUser' => $modelUser,
    ]);            
}

모델

public function rules()
{
    return [
        ..............
        ['email', 'unique', 'message'=>'Email already exist. Please try another one.'],
        ...........
    ]
}

포커스 / 키 업에서 유효성 검사 오류 메시지 사용 안 함

기본적으로 오류 메시지는 keyUp의 <div class="help-block"></div> 에있는 textbox 아래에 표시되거나 유효성 제한 조건이 충족되지 않으면 제출 버튼을 누른 후 나타납니다.

때로는 onKeyup 이벤트에서만 유효성 검사를 제출할 때 메시지가 필요합니다.

yii2/widgets/ActiveForm.php 파일을 확인해 봅시다 :

<?php

namespace yii\widgets;

use Yii;
use yii\base\InvalidCallException;
use yii\base\Widget;
use yii\base\Model;
use yii\helpers\ArrayHelper;
use yii\helpers\Url;
use yii\helpers\Html;
use yii\helpers\Json;

class ActiveForm extends Widget
{
  public $action = '';
  public $method = 'post';
  public $options = [];
  .
  .
  .
  public $validateOnSubmit = true;
  public $validateOnChange = true;
  public $validateOnBlur = true;
  public $validateOnType = false;
  
  .
  .
  .
  
}

$validateOnBlur 는 기본적으로 true 로 설정되어 있습니다. 프레임 워크 파일을 변경하는 것은 매우 나쁜 일이므로 양식을 사용할 때 재정의해야합니다.

<?php $form = ActiveForm::begin([ 'id' => 'register-form','validateOnBlur' => false]); ?>

유효성 검사 시나리오

시나리오를 사용하면 다른 상황에서 유효성 검사를 수행 할 수 있습니다.

모델 클래스에서 시나리오 정의

    class User extends \yii\db\ActiveRecord 
    {
      public static function tableName()
      {
          return 'user_master';
      }

    // define validation in rule() function
  public function rules()
  {
    return [
      [['email_id'],'email'],
      [['first_name',],'required','on'=>['create','update']],  // create scenario
      [['email_id',],'required','on'=> ['admin','create','update','forgotpassword']],
      [['mobile',],'required','on'=>['admin','create','update']],
    ];
  }
}

컨트롤러에서 시나리오 사용

public function actionCreate()
{
  $model = new User();
  $model->scenario="create";  // use create scenario, create scenario validaion applied in this model
            
  
}
public function actionUpdate()
{
    $model = new User();
    $model->scenario="update";  // use update scenario, update scenario validaion applied in this model
}

배열 유효성 검사

Yii2 버전 2.0.4에는 배열의 각 항목을 확인하는 데 사용되는 EachValidator가 있습니다.

[
    // ... other rules
    ['userIDs', 'each', 'rule' => ['integer']],
]

['integer'] 부분은 Yii2가 제공하는 모든 다른 유효성 검사기 객체 일 수 있으며 유효성 검사기에 대한 특정 인수를 보유 할 수 있습니다. 유사 : ['integer', 'min' => 1337] . 사용자 ID에 배열이 포함되어 있지 않으면 규칙 유효성 검사가 실패합니다.

내용의 유효성을 검사하지 않고 속성에 배열이 포함되어 있는지 확인하려는 경우에는 자체 유효성 검사기를 작성할 수 있습니다.

[
    ['myAttr', function($attribute, $params) {
        if (!is_array($this->$attribute)) {
            $this->addError($attribute, "$attribute isn't an array!");
        }
    }]
]


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow