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

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

Запись от and_y87 размещена 27.05.2022 в 19:30
Показов 1526 Комментарии 0

Для валидации `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
Комментарии
 
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru