2014-10-17 2 views
0

Привет, прямо сейчас я использую Yii-пользовательский модуль. Я новичок в этом и столкнулся с некоторыми проблемами. Я создаю поле профиля agentKey от user/profileField/create здесь. Теперь я хочу сделать его уникальным. Что мне нужно изменить, чтобы сделать его уникальным и выбросить ошибку, если она не удовлетворяет условию.Создайте уникальное поле в модуле yii-пользователя

Это правило в модели профиля.

public function rules() 
{ 
    if (!$this->_rules) { 
     $required = array(); 
     $numerical = array(); 
     $float = array();  
     $decimal = array(); 
     $rules = array(); 

     $model=$this->getFields(); 

     foreach ($model as $field) { 
      $field_rule = array(); 
      if ($field->required==ProfileField::REQUIRED_YES_NOT_SHOW_REG||$field->required==ProfileField::REQUIRED_YES_SHOW_REG) 
       array_push($required,$field->varname); 
      if ($field->field_type=='FLOAT') 
       array_push($float,$field->varname); 
      if ($field->field_type=='DECIMAL') 
       array_push($decimal,$field->varname); 
      if ($field->field_type=='INTEGER') 
       array_push($numerical,$field->varname); 
      if ($field->field_type=='VARCHAR'||$field->field_type=='TEXT') { 
       $field_rule = array($field->varname, 'length', 'max'=>$field->field_size, 'min' => $field->field_size_min); 
       if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message); 
       array_push($rules,$field_rule); 
      } 
      if ($field->other_validator) { 
       if (strpos($field->other_validator,'{')===0) { 
        $validator = (array)CJavaScript::jsonDecode($field->other_validator); 
        foreach ($validator as $name=>$val) { 
         $field_rule = array($field->varname, $name); 
         $field_rule = array_merge($field_rule,(array)$validator[$name]); 
         if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message); 
         array_push($rules,$field_rule); 
        } 
       } else { 
        $field_rule = array($field->varname, $field->other_validator); 
        if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message); 
        array_push($rules,$field_rule); 
       } 
      } elseif ($field->field_type=='DATE') { 
       $field_rule = array($field->varname, 'type', 'type' => 'date', 'dateFormat' => 'yyyy-mm-dd', 'allowEmpty'=>true); 
       if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message); 
       array_push($rules,$field_rule); 
      } 
      if ($field->match) { 
       $field_rule = array($field->varname, 'match', 'pattern' => $field->match); 
       if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message); 
       array_push($rules,$field_rule); 
      } 
      if ($field->range) { 
       $field_rule = array($field->varname, 'in', 'range' => self::rangeRules($field->range)); 
       if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message); 
       array_push($rules,$field_rule); 
      } 
     } 

     array_push($rules,array(implode(',',$required), 'required')); 
     array_push($rules,array(implode(',',$numerical), 'numerical', 'integerOnly'=>true)); 
     array_push($rules,array(implode(',',$float), 'type', 'type'=>'float')); 
     array_push($rules,array(implode(',',$decimal), 'match', 'pattern' => '/^\s*[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\s*$/')); 
     $this->_rules = $rules; 
    } 
    return $this->_rules; 
} 

ответ

0

Это работает нормально AFAIK (вам нужно будет изменить в соответствии с вашими функции/модуль, хотя)

array('field_name','unique','message'=>'Error message in case of duplicate value entered'), 

также взглянуть на эти ссылки, это может быть полезно для вас,

http://www.yiiframework.com/extension/unique-attributes-validator/

http://www.yiiframework.com/wiki/168/create-your-own-validation-rule/

Смежные вопросы