0

我是 Yii 的新手。我在 yii wiki 和文档的帮助下完成了一些任务。现在,我已经完成了一份带有验证的员工详细信息更新表格。但是我不知道这个验证过程实际上是在哪里进行的。即使我可以看到验证脚本。以及如何自定义错误消息?谁能帮我抓住这个??

4

3 回答 3

2

对于内置验证器,您通常可以通过message在模型的rules().

一些内置验证器具有您可以设置的其他特定错误消息,例如CNumberValidator还具有属性tooSmalltooBig. 对于带有其他错误消息的验证器,这些都在验证器的参考文档中突出显示。

使用自定义验证规则时,您可以使用CModel::addErroror明确指定错误消息CValidator::addError,因此您可以完全控制它。

显示输入表单时,您可以使用属性自定义各种元素的CHtml::errorCssCSS 类(有错误的输入元素的 CSS 类)、CHtml::errorMessageCss(显示在输入元素旁边的错误消息的类)和CHtml::errorSummaryCss(错误的类如果您选择打印,通常会出现在表格顶部的摘要)。从 Yii 1.1.13 开始,您还可以自定义CHtml::errorContainerTag为每个验证错误消息选择标签名称(此标签将获取errorMessageCss类)。

于 2013-01-23T10:48:11.133 回答
1

你没有给我们太多的工作,所以这里是一个检查电话号码特定格式的例子,这个片段在一个模型中,你的模型中有更多的规则:

public function rules()
{
    array('contact_phone', 'phoneNumber'), //custom check fn see below
}

/** 
 * check the format of the phone number entered
 * @param string $attribute the name of the attribute to be validated
 * @param array $params options specified in the validation rule
 */
 public function phoneNumber($attribute,$params='')
 {
    if(preg_match("/^\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}$/",$this->$attribute) === 0)
    {   
        $this->addError($attribute,
            'Contact phone number is required and  may contain only these characters: "0123456789()- " in a form like (858) 555-1212 or 8585551212 or (213)555 1212' );  
    }   
 }

您还应该查看 YII wiki 以获取很多关于验证的好信息,例如这个

于 2013-01-23T04:48:00.073 回答
0

我可能只是在这里放了一个带有自定义错误的自定义验证器。看看我如何使用$this->getAttributeLabel($field)来获取验证器内给定字段的属性名称/标签,以便将其输出到自定义错误中:

public function checkFormFields($params)
{
    $patternAccount = '/\d{20}/'; // двадцать цифр
    $patternBic = '/\d{9}/'; // девять цифр
    $patternINN = '/\d{10,12}/'; // от десяти до двенадцати цифр
    $fields = explode(',', $params); // get the names of required fields
    foreach ($fields as $field)
     { 
         if($this->$field == '') 
            $this->addError($this->$field, Yii::t('general', $this->getAttributeLabel($field) ) .' '. Yii::t('general', 'should not be empty')); 
        if( $field == 'CurrentAccount' OR $field == 'CorrespondentAccount' ) 
        { 
            if(!preg_match($patternAccount, $this->$field))
                $this->addError($this->$field, Yii::t('general', $this->getAttributeLabel($field) ) .' '. Yii::t('general', 'should contain exact 20 digits')); 
        }               
        elseif( $field == 'BIC' ) 
        { 
            if(!preg_match($patternBic, $this->$field))
                $this->addError($this->$field, Yii::t('general', $this->getAttributeLabel($field) ) .' '. Yii::t('general', 'should contain exact 9 digits')); 
        }
        elseif( $field == 'INN' ) 
        { 
            if(!preg_match($patternINN, $this->$field))
                $this->addError($this->$field, Yii::t('general', $this->getAttributeLabel($field) ) .' '. Yii::t('general', 'should contain between 10 and 12 digits')); 
        }
     } 

希望这将帮助您清楚如何自定义错误。

于 2014-10-13T06:57:42.590 回答