我是 Yii 的新手。我在 yii wiki 和文档的帮助下完成了一些任务。现在,我已经完成了一份带有验证的员工详细信息更新表格。但是我不知道这个验证过程实际上是在哪里进行的。即使我可以看到验证脚本。以及如何自定义错误消息?谁能帮我抓住这个??
3 回答
对于内置验证器,您通常可以通过message
在模型的rules()
.
一些内置验证器具有您可以设置的其他特定错误消息,例如CNumberValidator
还具有属性tooSmall
和tooBig
. 对于带有其他错误消息的验证器,这些都在验证器的参考文档中突出显示。
使用自定义验证规则时,您可以使用CModel::addError
or明确指定错误消息CValidator::addError
,因此您可以完全控制它。
显示输入表单时,您可以使用属性自定义各种元素的CHtml::errorCss
CSS 类(有错误的输入元素的 CSS 类)、CHtml::errorMessageCss
(显示在输入元素旁边的错误消息的类)和CHtml::errorSummaryCss
(错误的类如果您选择打印,通常会出现在表格顶部的摘要)。从 Yii 1.1.13 开始,您还可以自定义CHtml::errorContainerTag
为每个验证错误消息选择标签名称(此标签将获取errorMessageCss
类)。
你没有给我们太多的工作,所以这里是一个检查电话号码特定格式的例子,这个片段在一个模型中,你的模型中有更多的规则:
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->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'));
}
}
希望这将帮助您清楚如何自定义错误。