Поскольку у нас шаблон ввода в форме не стандартный, а
{Label} с иконкой и {hint} завернутым в tooltip, {input}, {error}
Переделываем (наследуем) Activefield (от \yii\bootstrap5\ActiveField) следующим образом
Сделал метод для ввода текста →text($options=[]), который может вызывать
В зависимости от настройки
'textFields'=>[ 'default'=>'text', 'Aces.ips'=>'text', //IP адреса хранить иначе чем текст нет смысла 'Aces.notepad'=>'markdown', 'Acls.notepad'=>'markdown', 'Comps.ip'=>'text', 'Comps.mac'=>'text', 'Comps.raw_hw'=>'text', 'Comps.raw_sw'=>'text', 'Comps.external_links'=>'text', 'MaintenanceReqs.description'=>'markdown', 'MaintenanceReqs.links'=>'text', 'LicTypes.links'=>'text', 'Networks.notepad'=>'markdown', ],
Была следующая проблема: если у формы явно не задан ID, то он (т.к. форма наследуется от виджета) формируется как префикс (w) + индекс (0), поэтому по умолчанию у формы ID = w0.
И если на страницу, в которой уже есть форма, через Popup + Ajax подгрузить еще одну форму, то она соответственно тоже будет w0, т.к. она была первой на подгруженной странице. И тут возникает проблема с инициализацией JavaScript, т.к. к форме прилагается скрипт инициализации, и если формы называются одинаково, то возникает коллизия.
во избежание подобных коллизий мы делаем в init по умолчанию id вида className-id-form
Для этого во всех формах желательно указывать модель через конфиг
Во-первых у ArmsModel есть метод getAttributePlaceholder($attribute), который возвращает плейсхолдер для поля ввода атрибута.
Если атрибут отмечен как is_inheritable, то возвращает унаследованное значение (либо указанное в inheritablePlaceholder параметре атрибута (может быть и функцией))
Во вторых в ActiveField все методы для вывода инпутов переопределены для подгрузки плейсхолдеров
В третьих в форме по умолчанию включена Ajax валидация, которая в ArmsBaseController тоже переопределена и к данным валидации добавляет значения плейсхолдеров для валидируемого набора значений модели. Зачем? Меняем родителя - меняются унаследованные значения, которые видно в плейсхолдерах
В четвертых, чтобы обрабатывать передаваемые плейсхолдеры к форме прикрепляется обработчик события OnAjaxComplete
По умолчанию формы включают ajax валидацию, но чтобы сгенерировать url валидации по умолчанию (который обслуживается через ArmsBaseController) нужно указывать модель в конфигурацию формы