№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:
8) Rulesdan o`ta olmagandagi holat:
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.