نمایش نتایج 1 تا 7 از 7

نام تاپیک: فرم داینامیک و validation

  1. #1

    فرم داینامیک و validation

    یک قسمت از برنامه ای که دارم با yii مینویسم یک فرم داینامیک بر اساس سلکت باکس قبلی کاربر لود میشود مثلا فرض کنید اگر عدد 2 از سلکت باکس انتخاب شد در ادامه فیلد هایی به این صورت از دیتابیس جدول prpperty خوانده و اضافه میشود:

    (فیلد تکستی)چند دفعه:
    (فیلد تکست اریا): توضیحات:

    خوب حالا مشکل اینجاست که باید ولیدیشن هم برای این ها بگذارم. به این صورت که اولی فقط عدد قبول کند
    و دومی فقط متن

    در حالی که هر دو از یک مدل value ساخته شده اند. و این که کدام باید چه مقداری بگیرد و نوعشان که تکست فیلد و یا تکست اریا و ... باشد در جدول property مشخص شده

    دوستان دقت کنید من با نحوه رول نوشتن در yii مشکلی ندارم اما کاری که میخوام انجام بشه اینه که:

    بر اساس جدول property که فرم داینامیک تولید شده validation اختصاصی خود را بگیرد. و هر کدام از این ها فیلد ها در جدول values نهایتا ذخیره شود.

  2. #2

    نقل قول: فرم داینامیک و validation

    اگر شما بتونی سرور ساید، اونو ولیدیت کنی مثلا در beforeValidate در فرمتون فقط کافیه که ajax validation فرمتون را فعال کنین.

  3. #3

    نقل قول: فرم داینامیک و validation

    مشکل حل شد تقریبا اما از متد CValidator::createValidator
    استفاده کردم

    مشکل اصلی اینجاست که میخوام به مدل بعد از ساخت آبجکت ازش attribute اضافه کنم.
    یعنی همان توابع جادویی __set و __get در php مشکل اینجاست که وقتی این توابع را مینویسم پدرشان هم این توابع را دارند و خرابکاری میشود.
    من چی کار کنم که این کد اررو نده:

    $valuesQP= new ValuesQuestionParameter();

    echo $valuesQP->value_test=10;



    ارور اینه:
    Property "ValuesQuestionParameter.value_test" is not defined.

  4. #4

    نقل قول: فرم داینامیک و validation

    خوب توی کلاس ValuesQuestionParameter فیلد value_test رو تعریف نکردین.

  5. #5

    نقل قول: فرم داینامیک و validation

    نقل قول نوشته شده توسط 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),



    خوب حالا ولیدیشن رول رو به صورت متنی از دیتا بیس خوندم و باید اعمالش کنم. مشکلم اینهکه متنه و آرایه واقعی نیست. اصلا به نظر شما ولیدشن رول ها رو چه طوری تو دیتابیس ذخیره کنم؟ الان میشه اینا رو یه جور فهموند به مدل که اعمال کنه.

  6. #6

    نقل قول: فرم داینامیک و validation

    حالا که تا اینجا رو گفتم، و تونستم اون مشکلم حل کنم میگم چه طور حل شد که اگر کسی خواست مثل من فرم و مدل داینامیک و ولیدیشن داینامیک داشته باشه بدونه باید چی کار کنه

    آرایه ولیدیشن رو با تابع serialize تبدیل به متن کردم. و در دیتابیس ذخیره کردم. نه به صورت یک متن ساده

    موقع واکشی هم توی اون forech به جای جوین به استرینگ . یه آرایه ساختم و درون اون ریختمشون اما قبل از ریختن تو خونه های اون آرایه unserialize روشون انجام دادم. و در نهایت آرایه بدست آمده رو بازگشت دادم.

    http://99webtools.com/how-to-store-array-mysql.php
    نحوه ذخیره و خواندن آرایه در دیتابیس

  7. #7

    نقل قول: فرم داینامیک و validation

    من به هدف رسیدم اما از دوستان، و اساتید درخواست میکنم یکبار داستان را بخونند و اگر ایده بهینه تری برای اینکار دارند به من پیشنهاد بدن خیلی ممنون میشم

تاپیک های مشابه

  1. سوال: فرم داینامیک چیه؟
    نوشته شده توسط oliya24 در بخش VB.NET
    پاسخ: 4
    آخرین پست: پنج شنبه 21 مهر 1390, 22:25 عصر
  2. ایجاد فرم داینامیک
    نوشته شده توسط ramin149 در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: یک شنبه 06 شهریور 1390, 09:53 صبح
  3. سوال: تبدیل یک فرم داینامیک HTML به XMl
    نوشته شده توسط * joodi * در بخش XML و کاربرد آن
    پاسخ: 2
    آخرین پست: پنج شنبه 13 اسفند 1388, 21:20 عصر
  4. طراحی فرم داینامیک
    نوشته شده توسط HadiVB در بخش VB.NET
    پاسخ: 1
    آخرین پست: چهارشنبه 30 مرداد 1387, 15:06 عصر
  5. ایجاد فرم داینامیک
    نوشته شده توسط iekrang در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: پنج شنبه 02 شهریور 1385, 19:49 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •