نوشته شده توسط
MMSHFE
خوب توی کلاس ValuesQuestionParameter فیلد value_test رو تعریف نکردین.
بله میدونم که ایجاد نکردم و میخواستم با __set و __get ایجاد کنم و بخونم یعنی در واقع یک مدل داینامیک داشته باشم که در نهایت موفق شدم و به این صورت عمل کردم
class ValuesQuestionParameter extends CActiveRecord
{
protected $_members = array();
protected $_validation_rules=array();
public function __construct($nameFields)
{
foreach ($nameFields as $member=>$mmb) {
$this->_members[$mmb['name']] = null;
$this->_validation_rules[$mmb['name']] = $mmb['validation_rules'];
}
parent::__construct();
}
/**
* @return array validation rules for model attributes.
* این تابع کلا در حال تست و بررسی هست و درست نوشته نشده و اصل مشکلم هم همین جا هست
* همان طور که میبینید سعی کردم کلا آرایه ای که ولیدیشن رول قرار است بازگشت دهد را به صورت یک متن از تکمیل کنم. راهی هست که این متن درون متغییر مانند کد
* عمل کند. البته دارم تابع eval رو امتحان میکنم شاید جواب بده
*/
public function rules()
{
$allMembers = implode(', ', array_values($this->_validation_rules));
$s= array_values($this->_validation_rules);
$roles="return array(";
foreach ($s as $rol){
$roles.=$rol;
}
$roles.=");";
//eval($roles);
...
}
public function __get($attribute)
{
if (in_array($attribute, array_keys($this->_members))) {
return $this->_members[$attribute];
} else {
return parent::__get($attribute);
}
}
public function __set($attribute, $value)
{
if (in_array($attribute, array_keys($this->_members))) {
return $this->_members[$attribute] = $value;
} else {
return parent::__set($attribute, $value);
}
}
....
و در موقع ساخت مدل هم این کارو کردم:
$sql="SELECT name,validation_rules FROM tbl_parameter";
$names = Yii::app()->db->createCommand($sql)->query()->readAll();
$valuesQP= new ValuesQuestionParameter($names);
همون طور که میبینید و فقط قسمت ولیدیشن رول هام مشکل داره توی دیتابیس در جدول tbl_parameter فیلدی دارم که یک رکورد آن به طور مثال به این صورت است:
name: test
validation_rules:
array('test', 'numerical', 'integerOnly'=>true),
خوب حالا ولیدیشن رول رو به صورت متنی از دیتا بیس خوندم و باید اعمالش کنم. مشکلم اینهکه متنه و آرایه واقعی نیست. اصلا به نظر شما ولیدشن رول ها رو چه طوری تو دیتابیس ذخیره کنم؟ الان میشه اینا رو یه جور فهموند به مدل که اعمال کنه.