簡體   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