Yii-임시 유효성 검사

때로는 어떤 모델에도 바인딩되지 않은 값의 유효성을 검사해야합니다. 당신은 사용할 수 있습니다yii\base\DynamicModel 클래스는 속성과 규칙을 즉시 정의 할 수 있도록 지원합니다.

Step 1 − 추가 actionAdHocValidation 방법 SiteController.

public function actionAdHocValidation() {
   $model = DynamicModel::validateData([ 'username' => 'John', 'email' => '[email protected]' ], [ [['username', 'email'], 'string', 'max' => 12], ['email', 'email'], ]); if ($model->hasErrors()) {
      var_dump($model->errors);
   } else {
      echo "success";
   }
}

위의 코드에서 우리는 “dynamic” 사용자 이름과 이메일 속성으로 모델을 만들고 유효성을 검사합니다.

Step 2 − 유형 http://localhost:8080/index.php?r=site/ad-hoc-validation 웹 브라우저의 주소 표시 줄에 이메일이 14 자이므로 오류 메시지가 표시됩니다.

맞춤 검사기

사용자 지정 유효성 검사기에는 두 가지 유형이 있습니다.

  • 인라인 유효성 검사기
  • 독립형 검증 자

인라인 유효성 검사기는 모델 메서드 또는 익명 함수로 정의됩니다. 속성이 유효성 검사에 실패하면 다음을 호출해야합니다.yii\base\Model::addError() 오류 메시지를 저장하는 방법.

다음 예는 RegistrationForm 도시 속성의 유효성을 검사하므로 런던과 파리의 두 값만 사용할 수 있습니다.

<?php
   namespace app\models;
   use Yii;
   use yii\base\Model;
   class RegistrationForm extends Model {
      public $username;
      public $password; public $email;
      public $country; public $city;
      public $phone; public function rules() { return [ ['city', 'validateCity'] ]; } public function validateCity($attribute, $params) { if (!in_array($this->$attribute, ['Paris', 'London'])) { $this->addError($attribute, 'The city must be either "London" or "Paris".');
         }
      }
   }
?>

독립형 유효성 검사기는 yii\validators\Validator수업. 유효성 검사 로직을 구현하려면yii\validators\Validator::validateAttribute() 방법.

Step 1 − 독립형 유효성 검사기를 사용하여 이전 예제를 구현하려면 CityValidator.php 파일에 components 폴더.

<?php
   namespace app\components;
   use yii\validators\Validator;
   class CityValidator extends Validator {
      public function validateAttribute($model, $attribute) { if (!in_array($model->$attribute, ['Paris', 'London'])) { $this->addError($model, $attribute, 'The city must be either "Paris"
               or "London".');
         }
      }
   }
?>

Step 2 − 그런 다음 RegistrationForm 이런 식으로 모델링하십시오.

<?php
   namespace app\models;
   use app\components\CityValidator;
   use Yii;
   use yii\base\Model;
   class RegistrationForm extends Model {
      public $username; public $password;
      public $email; public $country;
      public $city; public $phone;
      public function rules() {
         return [
            ['city', CityValidator::className()]
         ];
      }
   }
?>