Model dosyasında yapılabilecek bazı validation rule ayarları:
String validation
public function rules()
{
return [
//karakter sınırı yok ise
[['postContent', 'postKeywords'], 'string'],
//max 25 karakter
[['postTitle', 'postTitleSeo'], 'string', 'max' => 25],
//max 255 karakter
[['postDescription'], 'string', 'max' => 255],
//karakter uzunluğu 4 ve 24 arası
['username', 'string', 'length' => [4, 24]],
];
}
Integer validation
public function rules()
{
return [
[['postID'], 'integer'],
];
}
Required validation
public function rules()
{
return [
[['postID', 'postTitle'], 'required'],
//ya da message
[['postTitle'], 'required','message'=>'Bu alan zorunlu!'],
];
}
Validation password gibi bazı durumlarda sadece kayıt ekleme esnasında bu alanlar zorunlu olsun, güncelleme esnasında zorunlu olmasın istersek scenario
kullanırız.
public function rules()
{
return [
['postTitle', 'required', 'on' => 'create']
];
}
ardından SiteConroller.php
içinde aşağıdaki eklemeleri yapmamız gerekli.
public function actionCreate()
{
$model = new Posts();
$model->scenario = 'create';
...
}
Uniqe validation
Tabloya tekrar kayıt girmek istemiyor ve özel mesaj göstermek istiyorsak message
kullanırız.
public function rules()
{
return [
[['postTitle'], 'unique'],
//ya da
[['postTitle'], 'unique','message'=>'{value} yazı başlığı daha önce kullanılmış'],//"Yii2 Türkçe dersler" yazı başlığı zaten var
//ya da
[['postTitle'], 'unique','message'=>'{attribute} daha önce kullanılmış'],//postTitle daha önce kullanılmış
];
}
Tabloya şartlı olarak tekrar kayıt girmek istemiyorsak targetAttribute
kullanırız.
public function rules()
{
return [
[['postTitle'], 'unique', 'targetAttribute' => ['postTitle','categoryID']],
//postTitle ve categoryID beraber benzersiz olur, yalnızca postTitle hata mesajı alır
[['postTitle', 'categoryID'], 'unique', 'targetAttribute' => ['postTitle', 'categoryID']],
//postTitle ve categoryID beraber benzersiz olur, beraber hata mesajı alırlar
];
}
Link(Url) validation
Linkin başında otomatik olarak http
olduğunu kabul etmemiz için defaultScheme
kullanırız.
public function rules()
{
return [
[['website'], 'url'],
//ya da
[['website'], 'url', 'defaultScheme' => 'http'],
];
}
Filter
[['field1','field2'],'filter','filter'=>'\yii\helpers\HtmlPurifier::process']
Email validation
public function rules()
{
return [
[['email'], 'email'],
];
}
Trim
public function rules()
{
return [
[['username', 'email'], 'trim'],
//kayıt göndermeden önce sağ ve soldaki boşlukları siler
];
}
Match
public function rules()
{
return [
['username', 'match', 'pattern' => '/^[a-z]\w*$/i']
//username için regex yazılabilir, sadece harflerden oluşur
];
}
Range
[['Format'], 'in', 'range' => ['MD', 'HTML']],
Captcha validation
public function rules()
{
return [
[
['verificationCode', 'captcha'],
]
];
}
Custom validation
Kendimize göre bazı fonksiyonlarda ekleyebiliriz, Örn GSM numarası:
public function rules()
{
return [
[
[['gsm'], 'GSMvalidation'],#GSM örn :(05XX) XXX-XXXX
]
];
}
public function GSMvalidation($attribute, $params)
{
//bunu kullanırken inputlarda formatter js mask kullanmalısınız
if(preg_match("/\([0-9]{4}\) [0-9]{3}-[0-9]{4}$/", $this->gsm)) {
return true;
}else{
$this->addError($attribute, '(05XX) XXX-XXXX benzeri bir gsm numarası kullanmalısınız!');
}
}
required when
['authorID', 'required', 'when' => function($model) {
return \backend\models\Posts::find()->where(['postID' => 3])->count()>0;
}],