Yii2 настраиваемая проверка для правила массива - PullRequest
0 голосов
/ 20 июня 2020

У меня есть настраиваемая модель формы в 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 ":" "}}

Но сообщения об ошибках не появлялись под полями ввода. Но я тоже не могу отправить форму для сохранения, поэтому проверка обнаруживает ошибку, просто не может отображать сообщения.

Кто-нибудь когда-нибудь писал пользовательскую функцию проверки для массивов?

1 Ответ

0 голосов
/ 06 июля 2020

Я использовал для определения пользовательской функции проверки для таких массивов:

...
 return [
   ['permissionEmails', 'each', 'rule' => ['string']],
   [['permissionEmails'], 'each', 'rule' => ['validatePermissionEmails']]
 ]
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...