我是Yii的新手。我在yii wiki和文档的帮助下完成了一些任务。现在我已经完成了一个表格,用于通过验证更新员工详细信息。但我不知道这个验证过程实际上在哪里。即使我可以看到脚本进行验证。我该如何自定义错误消息?任何人都可以帮我抓住这个吗?
答案 0 :(得分:2)
对于内置验证程序,您可以在模型的rules()
中定义规则时,通过设置验证的message
属性来自定义错误消息。
某些内置验证程序具有您可以设置的其他特定错误消息,例如CNumberValidator
还具有属性tooSmall
和tooBig
。对于带有其他错误消息的验证器,验证器的参考文档中会突出显示这些消息。
使用自定义验证规则时,您可以使用CModel::addError
或CValidator::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'));
}
}
希望这有助于您明确如何自定义错误。