Как правильно организовать классы (переопределение виджета ActiveForm)?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
lostdok
Сообщения: 48
Зарегистрирован: 2016.09.05, 18:23

Как правильно организовать классы (переопределение виджета ActiveForm)?

Сообщение lostdok »

Может глупый вопрос, но все же хотелось бы понять насколько правильно я все делаю.

Итак, есть проект на нескольких языках.

Для удобства создания/обновления записей в БД был написан виджет LangActiveForm. Он наследуется от \yii\widgets\ActiveForm.
Задача его проста:
1. Добавить JS файл (отвечает за логику переключения между языками, валидацию...)
2. Переопределить public метод field. Так, чтобы, если в $model передан массив (массив языковых вариаций), то возвращался не ActiveField, а LangActiveField (он просто выводит вместо одного поля множество полей под каждый язык).

Все работает. Все ок.

Но возникает задача: добавить тултипы (подсказки) с определенным внешним видом для полей формы. Подсказки должны быть получены из модели через getAttributeHint(...). Это все должно работать и при применении обычной ActiveForm и при использовании LangActiveForm.
Вот так это выглядит:
Изображение

Решение.
Создаю новый виджет backend\widgets\activeForm\ActiveForm он наследует \yii\widgets\ActiveForm;
Он переопределяет $fieldClass.
В backend\widgets\activeForm\ActiveField переопределяю $template и метод hint(...)

Теперь наследую мой LangActiveForm от нового backend\widgets\activeForm\ActiveForm.
Таким образом у меня есть подсказки и при использовании backend\widgets\activeForm\ActiveForm и при LangActiveForm.

При работе с сущностью у которой есть переводы я использую LangActiveForm, а при работе с записями без переводов - backend\widgets\activeForm\ActiveForm.

Вопрос. Не лучше ли мне наследовать backend\widgets\activeForm\ActiveForm от LangActiveForm. И таким образом применять backend\widgets\activeForm\ActiveForm абсолютно везде - и в записях с переводами и без?
Ответить