Форум программистов, компьютерный форум, киберфорум
and_y87
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Yii2 валидация ActiveField в ActiveForm на клиенте(frontend)

Запись от and_y87 размещена 27.05.2022 в 19:30
Обновил(-а) and_y87 09.06.2022 в 11:14

Для валидации `ActiveField` в `ActiveForm` необходимо создать класс наследуясь от класса `yii\validators\Validator`
созданный класс использовать при описании правил(rules) в модели/форме.

пример
  • app/models/forms/UserForm.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
namespace app/models/forms;
 
class UserForm extend app/models/User {
 
    public function rules(): array
    {
      [['password'], 'app\components\validators\PasswordValidator']
      // ... другие правила ...
    }
 
    // ... остальной код
}
  • app/components/validators/PasswordValidator.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
namespace app/components/validators;
 
use yii\validators\Validator;
 
class PasswordValidator extend Validator 
{
    public $message = 'сообщение об ошибке';
 
    /**
     * Валидация на `backend`
     *
     * @param $model
     * @param $attribute
     * @return void
     */
    public function validateAttribute($model, $attribute)
    {
        // ... код валидации
        if (empty($this->message)) {
            // добавить ошибку валидации
            $model->addError($attribute, $this->message);
        }
    }
 
    /**
     * Валидация для frontend
     *
     * @param $model
     * @param $attribute
     * @param $view
     * @return string
     */
    public function clientValidateAttribute($model, $attribute, $view)
    {
        $elementId = Html::getInputId($model, $attribute); // если нужен id инпута
 
        return <<<JS
        let input = $('#{$elementId}');
 
        #value - задаётся "из коробки"
 
        let error = false;
        
        // ... код валидации
 
        if ( value.length == 0 ) error = true;
        
        if ( error ) {
            // добавление ошибки валидации
            messages.push({$this->message});
        }
JS;
    }
 
}
документация
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru