繁体   English   中英

Yii2 自定义验证到数组规则

[英]Yii2 custom validation to array rule

我在 yii2 中有一个自定义表单 model,并且我有一个数组属性的规则:

public $permissionEmails;

public function rules() {
        return [
            ['permissionEmails', 'each', 'rule' => ['string']],
            ['permissionEmails', 'validatePermissionEmails'],
        ]
}

在视图文件中,我将字段放在索引从 0 开始的 foreach 循环中:

<?php for ($i = 0; $i < ProfileAlertForm::MAX_EMAIL_FIELDS; $i++): ?>

    <?= $form->field($model, 'permissionEmails[' . $i . ']')->textInput(['id' => "profilealertform-permissionemails{$i}"])->label(Yii::t("label", "Email")) ?>                                            

<?php endfor; ?>

我想编写一个自定义验证(validatePermissionEmails)来验证每个有错误的文本输入字段,所以如果我将非电子邮件文本写入第二个和第四个输入,我想看到错误消息(例如:“它不是电子邮件”)。

而且我知道,单个属性有 az email 验证器,我刚刚为我的数组属性编写了一个示例自定义验证器:

public function validatePermissionEmails($attribute, $params) {
    if ($this->$attribute) {
        $i=0;
        foreach ($this->$attribute as $index => $email) {  
            if(filter_var($email, FILTER_VALIDATE_EMAIL)===false) {
                $this->addError("permissionemails{$i}", Yii::t("error", "Not a valid email address")); 
            }
            $i++;
        }
    }
}

我从 ajax 验证中返回错误消息(例如,如果我有 5 个输入字段并且我没有使用正确的 email 字符串填写 2. 和 4. 输入文本,则错误结果是:

{"profilealertform-permissionemails1":["不是一个有效的 email 地址"],"profilealertform-permissionemails3":["不是一个有效的 email 地址"],"flashMessages":{"success":"","danger:" ","警告":"","信息":""}}

但是错误消息没有出现在输入字段下方。 但是我也无法发送要保存的表单,因此验证会看到错误,只是无法显示消息。

有没有人为 arrays 编写过自定义验证 function?

我曾经像这样为 arrays 定义自定义验证 function:

...
 return [
   ['permissionEmails', 'each', 'rule' => ['string']],
   [['permissionEmails'], 'each', 'rule' => ['validatePermissionEmails']]
 ]
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM