[英]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.