مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

اعتبارسنجی Ad Hoc در فریمورک Yii


گاهی اوقات شما نیاز به اعتبار سنجی مقادیری دارید که به هیچ مدلی متصل نیستند.دراینگونه موارد شما می توانید از کلاس yii\base\DynamicModel استفاده کنید.

مرحله 1 - متد actionAdHocValidation را به SiteController اضافه کنید.

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

در کد بالا ما یک مدل "dynamic" را با attribute های username و email  تعریف می کنیم و آنها را validate می کنیم.

 

مرحله 2 - در نوار آدرس مرورگر وبتان به آدرس http://localhost:8080/index.php?r=site/ad-hoc-validation بروید، پیام خطایی را مشاهده خواهید کرد، زیرا ایمیل 14 کاراکتر دارد.

Validatorهای سفارشی

دو نوع validator سفارشی وجود دارد -

  • Inline validators (اعتبارسنج های داخلی)
  • Standalone validators (اعتبارسنج های مستقل)

inline validator با استفاده از یک متد مدل یا یک تابع ناشناخته (anonymous function) تعریف می شود. اگر یک attribute ی اعتبارسنجی را خراب کند، باید از متد yii\base\Model::addError() برای ذخیره پیام خطا استفاده کنید.

 

در مثال زیر در مدل RegistrationForm ، پروپرتی city مورد اعتبارسنجی قرار میگیرد، بنابراین می تواند تنها دو مقدار را قبول کند - London  و  Paris.

<?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".');
         }
      }
   }
?>

یک standalone validator، کلاس yii\validators\Validator را گسترش می دهد. برای پیاده سازی validation logic، باید متد yii\validators\Validator::validateAttribute() را override کنید.

مرحله 1 - برای پیاده سازی مثال قبلی با استفاده از standalone validator، یک فایل 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".');
         }
      }
   }
?>

مرحله 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()]
         ];
      }
   }
?>

 

فصلِ: 14 , تعداد قسمت ها: 188 , سطح: صفر تا صد

این فصل در یک نگاه:

سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…
فصلِ: 8 , تعداد قسمت ها: 77 , سطح: صفر تا صد

این فصل در یک نگاه:

  پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید