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()]
];
}
}
?>