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