PDA

View Full Version : محدود کردن مقادیر داینامیک در مدل



amdvbgmail
شنبه 10 اسفند 1392, 15:30 عصر
با سلام خدمت کاربران محترم
بنده تازه شروع به کار با این فریمورک کردم.عنوان سوالم رو نمیدونم درست مطرح کردم یا خیر ! پوزش
من میخوام یه سری فیلد رو از جدولم بگیرم و داخل لیست باکس نشون بدم ، تا ایجا مشکلی نیست ولی چجوری مقدار این فیدهارو بفرستم به مدل برای اعتبار سنجی؟
من میخوام که مقادیر فیلد هارو محدود کنم ، به عنوان مثال کاربر نتونه با فایرباگ مقدار لیست باکس یا کمبوباکس رو تغییر بده و بفرسته ، در حالت عادی ایی فقط نوع فیلد رو validate
میکنه ، من میخوام مقدارشون رو هم متناسب با مقادیر موجود توی جدولم محدود کنم؟
با تشکر

MMSHFE
شنبه 10 اسفند 1392, 17:09 عصر
باید از Validator مخصوص این کار یعنی in استفاده کنید. مثال:

array('fieldName', 'in', array('range'=>array('value1', 'value2', 'value3')));
یا اگه میخواین اجازه بدین که خالی باشه (Null رو توی دیتابیس فعال کردین)، اینطوری بنویسید:

array('fieldName', 'in', array('allowEmpty'=>true, 'range'=>array('value1', 'value2', 'value3')));
حتی میتونید درصورت تمایل خاصیت strict رو هم True کنید تا علاوه بر مقدار، نوع متغیر هم چک بشه که با نوع مقادیری که شما گذاشتین یکسان باشه.
البته دقت کنید که اگه موقع ساختن جدول، نوع فیلد رو Enum گذاشته باشین و مقادیر مجاز رو وارد کرده باشین، وقتی با Gii مدل رو میسازین، خود Yii اینها رو تشخیص میده و براتون Validation Ruleها رو بطور خودکار تنظیم میکنه.

nadi_1368
شنبه 10 اسفند 1392, 17:12 عصر
سلام


public function rules()
{
return array(
//....
array('field', 'checkValue'),
//....
);
}

public function checkValue($attribute,$params)
{
if(!$this->field)
$this->addError('field','Error .....');
}

MMSHFE
شنبه 10 اسفند 1392, 17:33 عصر
نیازی به این پیچیدگی نیست. ولیدیتور in خودش اینکار رو انجام میده.

nadi_1368
شنبه 10 اسفند 1392, 18:52 عصر
حق با شماست اما اگه بخواد مقادیر با یه سری عملیات یا جداول دیگه چک کنه.....

amdvbgmail
شنبه 10 اسفند 1392, 19:46 عصر
ممنون از پاسخ دوستان، لطف کردید. امیدوارم همیشه موفق و شاد باشید