I would like using "unique validator" on "Form Model" for two task "create and update data". But when I update data, the field with unique then show error. I want the validator disable with itself data,and validator with new replace data.
<?php
class TypeForm extends CFormModel{
public $name;
public $slug;
public $des;
public $order = 10;
public $active = Type::TYPE_ACTIVE;
public $isNew = true; // if update set to false
public function rules(){
return array(
array('name, slug, active','required'),
array('name,slug','length','max'=>250,'min'=>4),
array('slug','unique','className'=>'Type'), //work on add new data, but update not working
array('des, order','safe'),
);
}
public function onSaveForm(CEvent $event){
$this->raiseEvent('onSaveForm', $event);
}
public function saveForm(){
$this->onSaveForm(new CEvent($this));
$model = new Type;
$model->attributes = $this->attributes;
return $model->save(false);
}
public function onUpdate(CEvent $event){
$this->raiseEvent('onUpdate', $event);
}
public function updateForm(){
}
}
and my form
<?php
/* @var $this TypeFormController */
/* @var $model TypeForm */
/* @var $form CActiveForm */
?>
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'type-form-_form-form',
'enableAjaxValidation'=>false,
)); ?>
<p class="note">
Fields with <span class="required">*</span> are required.
</p>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'name'); ?>
<?php echo $form->textField($model,'name',array("size"=>40));?>
<?php echo $form->error($model,'name'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'slug'); ?>
<?php echo $form->textField($model,'slug',array("size"=>40));?>
<?php echo $form->error($model,'slug'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'active'); ?>
<?php echo $form->dropDownList($model, 'active',
array(
""=>"choose once",
Type::TYPE_ACTIVE=>"Active",
Type::TYPE_SUPPEND=>"Suppend",
)
) ?>
<?php echo $form->error($model,'active'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'order'); ?>
<?php echo $form->textField($model,'order',array("size"=>40));?>
<?php echo $form->error($model,'order'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'des'); ?>
<?php echo $form->textArea($model,'des',array("rows"=>10,"cols"=>50)); ?>
<?php echo $form->error($model,'des'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNew?"New":"Update"); ?>
<?php echo CHtml::resetButton("Clear"); ?>
</div>
<?php $this->endWidget(); ?>
</div>
<!-- form -->
ps: I wouldn’t like use CActiveRecord
sr my bad english