Имеются 2 таблицы - bid_type(id,name,status,b_deleted) и bid_fields(id,idzt,idft,name,required), а также 1 модель BidType для первой таблицы. В модели (BidType.php) объявляю 4 дополнительных свойства и для них прописываю правила:
class BidType extends CActiveRecord
{
public $field_name;
public $field_type;
public $field_required;
public $field_default;
public function rules()
{
return array(
array('name', 'length', 'max'=>255),
array('name,field_name', 'required'),
array('status', 'numerical', 'integerOnly' => true),
array('id, name, status, b_deleted, field_name', 'safe', 'on'=>'search'),
);
}
В форме нужно несколько раз вывести элементы ввода для этих искусственно объявленных 4 свойств, чтобы потом при сохранении формы перехватить их и сохранить в другую таблицу. Согласно http://www.yiiframework.com/doc/guide/1.1/ru/form.table делаю так:
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'bid-type-form',
'enableAjaxValidation'=>true,
'clientOptions'=>array(
'validateOnChange'=>true,
'validateOnType'=>true,
'validationDelay'=>0,
),
)); ?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'name'); ?>
<?php echo $form->textField($model,'name',array('size'=>40,'maxlength'=>255)); ?>
<?php echo $form->error($model,'name'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'status'); ?>
<?php echo $form->dropDownList($model,'status',array('0'=>'создаваемый','1'=>'создание завершено')); ?>
<?php echo $form->error($model,'status'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Создать' : 'Сохранить изменения'); ?>
</div>
<br>
<?php for($i=0;$i<2;$i++) { ?>
<div class="row">
<?php echo $form->labelEx($model,"[$i]field_name"); ?>
<?php echo $form->textField($model,"[$i]field_name",array('size'=>40,'maxlength'=>255)); ?>
<?php echo $form->error($model,"[$i]field_name"); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,"[$i]field_type"); ?>
<?php echo $form->dropDownList($model,"[$i]field_type",$list); ?>
<?php echo $form->error($model,"[$i]field_type"); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,"[$i]field_default"); ?>
<?php echo $form->textField($model,"[$i]field_default",array('size'=>40,'maxlength'=>255)); ?>
<?php echo $form->error($model,"[$i]field_default"); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,"[$i]field_required"); ?>
<?php echo $form->checkBox($model,"[$i]field_required",array('checked'=>'checked')); ?>
<?php echo $form->error($model,"[$i]field_required"); ?>
</div>
<?}?>
<?php $this->endWidget(); ?>
</div><!-- form -->
Валидация полей name и status (полей таблицы bid_type) работает нормально. Но не могу понять, почему валидация дополнительных полей работает неправильно:
-
на странице bidtype/create для поля field_name валидация успешна даже в случае противоречия любым описанным в rules правилам - сейчас там только required (и светится зеленым соответствующее поле ввода)
-
на странице bidtype/update/4 для поля field_name валидация не вызывается вообще (и поле не подсвечивается).
Оба пункта касаются Ajax-валидации, при отправке формы общий список ошибок и замечания к каждому не прошедшему валидацию полю выдаются верно
Заранее спасибо всем отозвавшимся.