У меня есть настраиваемая модель формы в yii2, и у меня есть правило для свойства массива:
public $permissionEmails;
public function rules() {
return [
['permissionEmails', 'each', 'rule' => ['string']],
['permissionEmails', 'validatePermissionEmails'],
]
}
И в файле представления я помещаю поля в foreach l oop с начало индекса с 0:
<?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) для проверки каждого поля ввода текста с ошибкой, поэтому, если я напишу текст, отличный от электронной почты, на второй и четвертый ввод , я хочу увидеть сообщение об ошибке (например: «это не электронная почта»).
И я знаю, что есть валидатор электронной почты z для одного свойства, я просто написал пример настраиваемого валидатора для моего свойство array:
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 полей ввода, и я не заполняю входные тексты 2. и 4. с помощью правильная строка электронной почты, результат ошибки:
{"profilealertform-permissionemails1": ["Недействительный адрес электронной почты"], "profilealertform-permissionemails3": ["Недействительный адрес электронной почты"], "flashMessages ": {" успех ":" "," опасность ":" "," предупреждение ":" "," info ":" "}}
Но сообщения об ошибках не появлялись под полями ввода. Но я тоже не могу отправить форму для сохранения, поэтому проверка обнаруживает ошибку, просто не может отображать сообщения.
Кто-нибудь когда-нибудь писал пользовательскую функцию проверки для массивов?