如何自定义yii表单验证?

时间:2013-01-23 04:31:42

标签: php yii validation

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

3 个答案:

答案 0 :(得分:2)

对于内置验证程序,您可以在模型的rules()中定义规则时,通过设置验证的message属性来自定义错误消息。

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

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

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

答案 1 :(得分: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以获取有关验证的大量有用信息,例如this

答案 2 :(得分: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')); 
        }
     } 

希望这有助于您明确如何自定义错误。