ورود

View Full Version : اعتبار سنجی داینامیک



amdvbgmail
شنبه 12 مهر 1393, 08:50 صبح
با سلام
من میخوام توی مدلم یه اعتبار سنجی به شکل زیر انجام بدم
که داخل مدل یه تابع بنویسم که مقدار فیلد جاری رو دریافت کنه و یه سری عملیات انجام بده نهایتا تابع رو داخل قسمت رول قرار بدم به شکل زیر


array('m_number', 'compare','operator'=>'<=','compareValue'=> $this->capa($this->attributes['m_number'])),




الان کد بالا کار نمیکنه درواقع میخوام نحوه استفاده از فیلد رکورد جاری رو بدست بیارم و به عنوان ورودی بدمش به تابع capa() ! ولی هرکاری میکنم جواب نمیده
لطفا اگه کسی میدونه کمکم کنه
مرسی

MMSHFE
شنبه 12 مهر 1393, 09:00 صبح
اینطوری تست کنید ببینید جواب میده:

array('m_number', 'compare','operator'=>'<=','compareValue'=>$this->capa()),
کد متد capa :

public function capa()
{
// access to m_number via $this->m_number
}

amdvbgmail
شنبه 12 مهر 1393, 09:25 صبح
ممنون از پاسختون جناب شهرکی
اینو امتحان کردم اما باز کار نکرد در واقع فک کنم مقدار رو دریافت نمیکنه

Veteran
شنبه 12 مهر 1393, 09:28 صبح
مشکل چیه ؟ دقیقا میخواید چیکار کنید ؟

amdvbgmail
شنبه 12 مهر 1393, 09:34 صبح
من میخوام توی فایل مدل به مقدار فیلدی که کاربر نوشته دسترسی پیدا کنم و براساس اون فیلد های بعدی رو ولیدیت کنم

Veteran
شنبه 12 مهر 1393, 09:43 صبح
public function beforeValidate(){
echo CVarDumper::dump($this->attributes,10,true);
Yii::app()->end();
}

توی مدل مربوطه قرار بدید ببینید خروجی چی هستش ؟ و یک مثال از کاری رو که میخواید رو هم مطرح کنید ببینیم چیکار میشه کرد.

amdvbgmail
شنبه 12 مهر 1393, 09:51 صبح
خروجی یه آرایه از فیلدهای مدل به همراه مقادیر اون ها هستش ،

amdvbgmail
شنبه 12 مهر 1393, 09:56 صبح
نمیدونم چه جوری توضیح بدم یه مثال ساده بگم..
کاربر وارد فرم جاری میشه و میخواد 2 تا فیلد رو پر کنه فیلد اول رو مثلا 1 وارد میکنه و طبق مقدار این فیلد اول ، فیلد دوم ولیدیت بشه یعنی مقدار توی مدل گرفته بشه و داخل یه تابع قرار بدیم و اون تابع بررسی میکنه و یه مقدار برمیگردونه و با اون مقدار ولیدت بشه فیلد دوم!

rezaonline.net
شنبه 12 مهر 1393, 13:34 عصر
public $val1 , $val2;


function rules()
{
return array(
array('val1,val2','checkVal'),
);
}


function checkVal($att,$val)
{
if($this->val1 > $this->val2)
{
$this->addError('val1','val1 بزرگتر هست');
$this->addError('val2','val1 بزرگتر هست');
}
}

amdvbgmail
شنبه 12 مهر 1393, 13:51 عصر
ممنون رضا جان..