Yii2 da model rules ya'ni tekshiruvchi qoidalar bilan ishlash 1-qism

Bundan oldingi maqolamda men Yii2 qanday qilib formalar bilan samarali ishlashni ko'rsatgan edim. Endi bu galgi maqolamda men sizlarga formadagi validation rules ( yani formani tekshiruvchi qoidalar) bilan ishlashni va ularni qanday qilib yasashni ko'rsatmoqchiman. Shu maqsadda bu galgi maqolamni ikki qismga bo'ldim. Birinchi qismda Yii2ni o'zida bor va ko'p ishlatiladigan tekshiruvchi qoidalarini (yani validation rules) ko'rsataman. Ikkinchi qismda esa sizga qanday qilib o'zingiz uchun qulay yoki kerak bo'lgan tekshiruvchi qoidalar yasash mumkinligini ko'ratib beraman.

Demak boshladik.

Men bu maqolamda Yii 2.0.11 versiyali yoki undan yuqori bo'lgan framework haqida ma'lumot bermoqchiman. Sababi, agar siz frameworkni o'rganmoqchi bo'lsangiz doim oxirgi versiyasidan boshlang, hozir (21.12.2017) Yii2 2.0.13 versiyada. Shuning uchun men bergan ma'lumot oldingi versiyalarda ishlamasligi mumkin.

Yii2ning asosiy tekshiruvchi qoidalari 3ta komponentda iborat. Bular: tekshirilayotgan o'zgaruvchi, tekshiruvchi qoida va qo'shimcha parametrlardir. Masalan, formadan kelayotgan ma'lumotni siz son yoki so'z ekanligini tekshirmoqchisiz va ularga minimum yoki maksimum bermoqchisiz deylik. Unda:

public function rules()
{
  return [
   [ 'checkingNumber','integer','min'=>2],
   [ 'checkingString','string','max'=>32,'min'=>2,'message'=>"Tekshirilayotgan o'zgaruvchi so'z bo'lishi kerak va kamida 2ta ko'pi bilan 32 harfdan tashkil topishi kerak"]
  ];
}

Berilgan misolda ko'rib turaningizdek birinchi qoidada biz sonni tekshiryapmiz yani bu yerda checkingNumber bu tekshiraliyotgan o'zgaruvchi integer bu tekshiruvchi min bu qo'shimcha qoida. Ikkinchi qoidada yana huddu shunday checkingString bu tekshirilayotgan o'zgaruvchi, string bu chekshirayotgan qoida va qolganlari qo'shimcha parametrlar, ya'ni max bu so'zni maksimum uzunligi, min bu so'zning minimum uzunligi va message bu xato bo'lsa foydalanuvchiga ko'rsatiladigan xatolikdir.

Demak, bu misoldan ko'rdikki tekshiruchi qoidalarda birinchi bo'lib o'zgaruvchi kiritiladi, so'ng tekshiruvchi qoida va qolgan hammasi bu parametrlardir. Agar siz bir yo'lakka bir nechta o'zgaruvchilarni bir xil qoida bo'yicha tekshirmoqchi bo'lsangiz, unda siz ularni massiv tariqasida bersangiz bo'ladi, ya'ni:

public function rules()
{
  return [
    [ 'number1','integer','min'=>2],
    [ 'number2','integer','min'=>2],
    [ 'number3','integer','min'=>2]
 ];
}

Buni bitta qilib massiv qilib qisqartirsa.

public function rules()
{
  return [
    [ [ 'number1','number2', 'number3'],'integer','min'=>2]
  ];
}

Shunday qilib agar bir nechta o'zgaruvchini bir xil qoida bilan tekshirishni xohlasangiz, unda ularni massivga birlashtirib ishlating.

Demak, tekshiruvchi qoidalarni qanday ishlashini tushunib oldik, endi navbat,Yii2ni asosiy qoidalari bilan tanishishga keldi.

Sonlar bilan ishlash.

`interger` son butun yoki butun emasligini tekshiradi. Parametrlardan min, max va message qabul qiladi. min va max ruxsat etilgan eng katta va eng kichkina sonlarni ko'rsatadi. message bu xatolikda ko'rsatiladigan xabar.

public function rules()
{
  return [
    [ 'number1','integer','mix'=>1,'max'=>200,'message'=>"Butun son emas" ]
  ];
}

`double` va `number` ikkalasi ham o'zgaruvchini natural son ekanligiga tekshiradi. min, max ruxshat etilgan eng katta va eng kichik sonalrni ko'rsatadi.

public function rules()
{
  return [
    [ 'son1','double','mix'=>1,'max'=>200,'message'=>"Son emas yoki 1 dan kichik yoki 200dan katta" ],
    [ 'son1','number','mix'=>1,'max'=>200,'message'=>"Son emas yoki 1 dan kichik yoki 200dan katta" ]
  ];
}

`filter` berilgan ma'lumot ustida har xil manipulatsiyalar bajaradi.

public function rules()
{
  return [
    //O'ng va chap tomonidan bo'sh joylarni olib tashlaydi
    [ ['username'], 'filter', 'filter' => 'trim', 'skipOnArray' => true],
    [ 'phone', 'filter', 'filter' => function ($value) {
    //+99890 999 99 99 ni 99890 999 99 99 ga o'zgartiramiz
      return substr($value,1,strlen($value));
   } ],
  ];
}

`match` berilgan ma'lumotlarni muntazam ifodalar (yani regular expression) orqali tekshiradi.

public function rules()
{
  return [
    //Berilgan telefon normerni +998**-***-**-** ga solishtiradi
    ['tel', 'match', 'pattern' => '/^\+\9\9\8\(\d{2}\)\-\d{3}\-\d{2}\-\d{2}$/']
  ];
}

`string` berilgan ma'lumotni so'z ga solishtiradi. min va max parametrlar ma'lumotni eng katta va eng kichik holatini tekshiradi.

public function rules()
{
  return [
    //Berilgan ma'lumotni so'z ekanligi tekshiradi.  
    ['username', 'string', 'min'=>2,'max']
  ];
}

`required` berilgan ma'lumotlarni majburiy ekanligini tekshiradi.

public function rules()
{
  return [
    //username, password va email majburiy
    [ ['username','password','email'], 'required']
  ];
}

`in` berilgan ma'lumotni massiv elementlari ichidagilar bilan solishtiradi

public function rules()
{
  return [
      //category ni malibu, nexia yoki matizga solishtiradi
     [ 'category','in','range'=>['malibu','nexia','matiz'] ]
  ];
}

`email` va `ip` ma'lumotni email yoki ip ekanligini tekshiradi.

public function rules()
{
  return 
   [ 
     //email manzil ni haqiqiy emailmi yoki yo'q tekshiradi
      [ 'email_address','email' ],
       //ip manzilni haqiqiy ip ekanligini tekshiradi
      [ 'ip_address','ip']
   ];
}

`default` o'zgaruvchilarga agar ma'lumot foydalanuvchi tomonidan ma'lumot kelmasa, uning o'zniga to'ldiriladigan qiymat.

Masalan, agar foydalanuvchi turadigan davlatini ko'rsatmasa unda avtomatik tarzida O'zbekiston saqlanadi va bu mana bunday qilib bajariladi.

public function rules()
{
  return [
      //Country bu yashaydigan davlati, agar foydalanuvchi kiritmasa unda O'zbekiston saqlanadi
     [ 'country','default','value'=>"O'zbekiston" ],
     //created day bu yasalgan kuni, agar bu qimat yo'q bo'lsa unda avtomotik tarzda bugungi kun saqlanadi
     [ 'created_day','default','value'=>date('m-d-Y')]
  ];
}

`each` berilgan ma'lumot massiv bo'lganda foreach yordamida birma-bir har bir qiymatni boshqa bir tekshiruvchi qoidaga solishtiradi.

Masalan, foydalanuvchi bir nechta email manzilni massiv tariqasida jo'natdi deylik, unda biz `each` yordami bilan har bir qiymatni `email` orqali tekshiramiz. Mana bunday qilib

public function rules()
{
  return [
     ['emails', 'each', 'rule' => ['email']],
  ];
}

Bular asosiy validation rules, ya'ni tekshiruvchi qoidalar. Agar yanada ko'proq va chuqurroq ma'lumotlar kerak bo'lsa unda Yii2 asosiy web-sahifasiga kiring. Yii2 Validation rules.

Keyingi maqolamda sizlarga Qanday qilib shaxshiy tekshiruvchi qoidalarni yasashni ko'rsataman.

Etiboringiz uchun rahmat, Savol va takliflar bo'lsa izohlarda qoldiring.


Ziyavuddin

Muallif haqida

Vakhobov Ziyavuddin PHP da Yii2 Laravel va Symfonyda ishliman.


Blogdagi so‘nggi maqolalar:


Fikrlar 1

Ziyavuddin
Ziyavuddin
Uzur o'zgaruvchini so'zga tekshirganimda hatolik ketibdi, yani uni max ga tekshiryapganimda son berishni unitibman mana to'gri javob: public function rules() { return [ //Berilgan ma'lumotni so'z ekanligi tekshiradi. ['username', 'string', 'min'=>2,'max'=>32] ]; }
Iltimos, fikr bildirish uchun saytga kiring yoki ro‘yxatdan o‘ting!