我想验证多个CValidator类的属性。
更具体地说,我希望电子邮件验证程序验证电子邮件地址,但我也希望它是必需的。
我当然可以定义两个单独的规则,如下:
array('email', 'email'),
array('email', 'required'),
但是当我将输入留空时,验证仅返回一个错误,表示该字段是必需的,但它不会返回错误,说明它必须是电子邮件地址。当我填写非电子邮件字符串时,它会返回电子邮件验证错误。
我尝试将数组中的验证器和逗号分隔的字符串组合在一起,但这不起作用。所以我想唯一的选择是使用自定义验证方法。
但是如何在此方法中使用内置的CValidator
验证器?我如何构建它,两个规则一次验证而不是一次验证?
答案 0 :(得分:1)
用户界面明确指出电子邮件在空闲时无效是没有意义的。您告诉他们当空的时候需要电子邮件,或者当电子邮件不是空的但不是电子邮件时它是无效的。做这两件事对我来说似乎很困惑。
我个人只是使用:
array('email', 'email', 'allowEmpty' => FALSE),
答案 1 :(得分:1)
使用errorsummary()方法:
编辑: 更改了对CHTML的引用
http://www.yiiframework.com/doc/api/1.1/CHtml#errorSummary-detail
在您看来,添加
<?php echo CHtml::errorSummary($model, NULL, NULL, array ('firstError' => false));
...
<div class="row">
<?php echo $form->labelEx($model,'email'); ?>
<?php echo $form->textField($model,'email'); ?>
<?php echo $form->error($model,'email'); ?>
</div>
来自文档
要在容器div标记中呈现的其他HTML属性。一个 名为&#39; firstError&#39;的特殊选项被认可,当设定为真时, 将使错误摘要仅显示第一条错误消息 每个属性。如果未设置或为false,则显示所有错误消息 将显示。此选项自版本1.1.3起可用。
请注意,如果您使用的是Ajax验证,则只会在字段
旁边显示第一个错误答案 2 :(得分:0)
实际上,模型验证会返回所有验证错误,但CActiveForm::error
方法仅显示所选属性的第一个错误。我想你现在使用这样的东西:
<?php echo $form->error($model,'attr'); ?>
但应该使用
<?php if ($model->hasErrors('attr')) : ?>
<?php $errorList = $model->getErrors('attr'); ?>
<?php foreach ($errorList as $error) : ?>
// display error
<?php endforeach ?>
<?php endif ?>
此外,您可以编写自己的帮助方法来显示单个属性的所有错误。
答案 3 :(得分:0)
如果我找到了你,你就会遇到错误信息。我认为您可以使用以下方法来显示消息。
array('email', 'email', 'message' => 'Please provide valid email.'),
array('email', 'required', 'message' => 'Email is required. Please provide valid email.'),
希望这会对你有帮助....
答案 4 :(得分:0)
您可以使用验证程序的binary_erosion
属性。
skipOnError