
Validation یا اعتبارسنجی در فریمورک Yii
هرگز نباید به داده های ارسال شده از سوی کاربران اعتماد کنید. برای اعتبارسنجی یک مدل با ورودی های کاربر، شما باید متد yii\base\Model::validate() را فراخوانی کنید. اگر اعتبار سنجی موفقیت آمیز باشد، یک مقدارBoolean بازگردانده می شود. اگر در حین اعتبارسنجی، خطایی رخ دهد، می توانید آن خطا را از property با نام yii\base\Model::$errors استخراج کنید.
استفاده از قوانین یا Rule ها
برای اینکه بتوانید از تابع validate()استفاده کنید، باید متد yii\base\Model::rules() را override کنید.
مرحله 1 - متد rules() یک آرایه را به شکل و فرمت زیر برمی گرداند.
[
// required, specifies which attributes should be validated
['attr1', 'attr2', ...],
// required, specifies the type a rule.
'type_of_rule',
// optional, defines in which scenario(s) this rule should be applied
'on' => ['scenario1', 'scenario2', ...],
// optional, defines additional configurations
'property' => 'value', ...
]
برای هر rule، باید تعریف کنید کدام attribute از rule اعمال می شود و کدام نوع از rule استفاده شود.
قوانین اصلی اعتبار سنجی بدین قرار هستند :
boolean, captcha, compare, date, default, double, each, email, exist, file, filter, image, ip, in, integer, match, number, required, safe, string, trim, unique, url
مرحله 2 - یک مدل جدید در پوشه models ایجاد کنید.
<?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 [
// the username, password, email, country, city, and phone attributes are
//required
[['username' ,'password', 'email', 'country', 'city', 'phone'], 'required'],
// the email attribute should be a valid email address
['email', 'email'],
];
}
}
?>
ما یک مدل برای فرم ثبت نام تعریف نمودیم. این مدل شش property دارد: username, password, email, country, city, phone. همه آنها مورد نیاز هستند و آدرسemail باید یک آدرس معتبر باشد.
مرحله 3 - متد actionRegistration را به SiteController اضافه کنید، یک مدل به نام RegistrationForm ایجاد کنید و آنرا به یک view پاس دهید.
public function actionRegistration() {
$model = new RegistrationForm();
return $this->render('registration', ['model' => $model]);
}
مرحله 4 - یک view برای فرم ثبت نام ایجاد کنید، بدین شکل که درون پوشه views/site، یک فایل به نام registration.php با کد زیر اضافه کنید.
<?php
use yii\bootstrap\ActiveForm;
use yii\bootstrap\Html;
?>
<div class = "row">
<div class = "col-lg-5">
<?php $form = ActiveForm::begin(['id' => 'registration-form']); ?>
<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<?= $form->field($model, 'email')->input('email') ?>
<?= $form->field($model, 'country') ?>
<?= $form->field($model, 'city') ?>
<?= $form->field($model, 'phone') ?>
<div class = "form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary',
'name' => 'registration-button']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
</div>
ما از ویجت ActiveForm برای نمایش فرم ثبت نام استفاده می کنیم.
مرحله 5 - اگر در لوکال هاست به آدرس http://localhost:8080/index.php?r=site/registration بروید و روی دکمه submit کلیک کنید، می توانید قوانین اعتبارسنجی را مشاهده نمایید.
مرحله 6 - برای سفارشی کردن پیام خطای property با نام username، متد rules() در RegistrationForm را به شکل زیر ویرایش کنید.
public function rules() {
return [
// the username, password, email, country, city, and phone attributes are required
[['password', 'email', 'country', 'city', 'phone'], 'required'],
['username', 'required', 'message' => 'Username is required'],
// the email attribute should be a valid email address
['email', 'email'],
];
}
مرحله 7 – در لوکال هاست به آدرس http://localhost:8080/index.php?r=site/registration بروید و روی دکمه submit کلیک کنید. همانطور که مشاهده می کنید پیام خطای پروپرتی username تغییر کرده است.
مرحله 8 - برای سفارشی کردن پروسه validation یا اعتبارسنجی، می توانید این متدها را override کنید.
-
yii\base\Model::beforeValidate(): triggers a
yii\base\Model::EVENT_BEFORE_VALIDATE event.
-
yii\base\Model::afterValidate(): triggers a
yii\base\Model::EVENT_AFTER_VALIDATE event.
مرحله 9 - برای حذف کاراکترهای space که در اطراف پروپرتی country قرار دارند و برای تبدیل ورودی خالی پروپرتی city به مقدار null، به ترتیب از validatorهای trim و default استفاده کنید.
public function rules() {
return [
// the username, password, email, country, city, and phone attributes are required
[['password', 'email', 'country', 'city', 'phone'], 'required'],
['username', 'required', 'message' => 'Username is required'],
['country', 'trim'],
['city', 'default'],
// the email attribute should be a valid email address
['email', 'email'],
];
}
مرحله 10 - اگر یک ورودی خالی باشد، می توانید یک مقدار پیش فرض برای آن تنظیم کنید.
public function rules() {
return [
['city', 'default', 'value' => 'Paris'],
];
}
اگر پروپرتی city خالی باشد، مقدار پیش فرض «paris» مورد استفاده قرار خواهد گرفت.
این فصل در یک نگاه:
…
سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…این فصل در یک نگاه:
…
پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…