Yii中一个属性的多重验证

时间:2014-04-08 08:30:48

标签: validation yii

我想验证多个CValidator类的属性。

更具体地说,我希望电子邮件验证程序验证电子邮件地址,但我也希望它是必需的。

我当然可以定义两个单独的规则,如下:

array('email', 'email'),
array('email', 'required'),

但是当我将输入留空时,验证仅返回一个错误,表示该字段是必需的,但它不会返回错误,说明它必须是电子邮件地址。当我填写非电子邮件字符串时,它会返回电子邮件验证错误。

我尝试将数组中的验证器和逗号分隔的字符串组合在一起,但这不起作用。所以我想唯一的选择是使用自定义验证方法。

但是如何在此方法中使用内置的CValidator验证器?我如何构建它,两个规则一次验证而不是一次验证?

5 个答案:

答案 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