№15 Dars — Yiida dinamik tekshiruv qoidalar biriktirish.

№15 Dars — Yiida dinamik tekshiruv qoidalar biriktirish.

№15 Dars - Yiida dinamik tekshiruv qoidalar biriktirish.

Yiida o`zi ishlab chiqqan tekshiruv qoidalaridan tashqari o`zingiz uchun ham mos tekshiruv funksiyalari yaratsangiz bo`ladi. Bunday yondashuv o`zimiz uchun shaxsiy tekshiruvlarni dinamik yaratish imkonini beradi. Keling misol bilan bu mavzuni oydinlashtirib olaylik.

Masalani qo`yilishi: startDateTime endDateTime dan kichkina bo`lishi kerak. Buni qoida tarzida kiritishimiz kerak.

Masalani yechilishi: Bir jadval berilgan unda startDateTime va endDateTime ustunlari mavjud.

Shunday qoida birktirishimiz kerakki endDateTime uchun natijada jadvalga qo`shilgan xar bir ma`lumot startDateTime endDateTime dan kichkina bo`lishi kerak.

1) Jadval yaratamiz:

CREATE TABLE `dates` (
`ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`startDateTime` DATETIME NOT NULL,
`endDateTime` DATETIME NOT NULL,
PRIMARY KEY (`ID`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

2) Jadvalga mos model hosil qilamiz.

3) Modelga quyidagicha kod kiritamiz:

public function rules()
{
 return array(
  array('startDateTime, endDateTime', 'required'),
  array('ID, startDateTime, endDateTime', 'safe', 'on'=>'search'),
  array('endDateTime', 'compareWithStartDateTime'),
 );
}

«‘endDateTime'» uchun «‘compareWithStartDateTime'» funksiya biriktirmoqdamiz.

4) pastdan shu funksiyani yozamiz:

public function compareWithStartDateTime($attribute, $params)
{
     if ($this->endDateTime startDateTime)
     $this->addError('endDateTime', 'endDateTime kichkina startDateTime dan.');
}

5) Controllerimizga quyidagicha kod kiritamiz:

$model = new Dates;
            if(isset($_POST['Dates']))
            {
                   $model->attributes=$_POST['Dates'];
                   if($model->validate())
                   {
                           $model->save();
                           $this->redirect(Yii::app()->user->returnUrl);
                   }
            }
            $this->render('contact',array('model'=>$model));

6) Viewimiz quiydagicha kod kiritamiz:

Dates

beginWidget('CActiveForm', array( 'id'=>'contact-form', 'enableClientValidation'=>true, 'clientOptions'=>array( 'validateOnSubmit'=>true, ), )); ?>
labelEx($model,'startDateTime'); ?> widget('zii.widgets.jui.CJuiDatePicker', array( 'model' => $model, 'attribute' => 'startDateTime', 'language' => Yii::app()->language, 'options' => array( // 'buttonImage' => '/backend/i/calendar-view-month.png', // 'buttonImageOnly' => 'true', 'showButtonPanel' => false, 'showOn' => 'both', 'changeMonth' => 'true', 'changeYear' => 'true', 'showOtherMonths' => 'true', 'selectOtherMonths' => 'true', 'yearRange' => 'c-100:c', ), ) ); ?> error($model,'startDateTime'); ?>
labelEx($model,'endDateTime'); ?> widget('zii.widgets.jui.CJuiDatePicker', array( 'model' => $model, 'attribute' => 'endDateTime', 'language' => Yii::app()->language, 'options' => array( // 'buttonImage' => '/backend/i/calendar-view-month.png', // 'buttonImageOnly' => 'true', 'showButtonPanel' => false, 'showOn' => 'both', 'changeMonth' => 'true', 'changeYear' => 'true', 'showOtherMonths' => 'true', 'selectOtherMonths' => 'true', 'yearRange' => 'c-100:c', ), ) ); ?> error($model,'endDateTime'); ?>
endWidget(); ?>

7) Viewimiz ko`rinishi:

e2849615 dars yiida dinamik tekshiruv qoidalar biriktirish 65e61a32c654a

8) Rulesdan o`ta olmagandagi holat:

e2849615 dars yiida dinamik tekshiruv qoidalar biriktirish 65e61a332f972

Ko`rib turganingizdek «Strat date time» katta «End date time» dan bizning qoidamiz bo`yicha «End date time» katta bo`lishi kerak edi. Shuning uchun bu yerda biz keltirgan xatolik xabari chiqmoqda.

Rulesdan muvofaqiyatli o`tsa demak jadvalga qoida bo`yicha qoshildi. Ishlarimiz to`g`ri amalga oshmoqda. Muvofaqiyatli o`tsa web ilovamizni asosiy ilovaga yo`naltirib yuboradi.

Manba:

Web Dasturlash
№15 Dars — Yiida dinamik tekshiruv qoidalar biriktirish.