Я ничего не слышал о том, что уже сделано для вас.
Пользовательский виджет и валидатор
Вы можете создать пользовательский виджет, который будет инкапсулировать два поля формы, если вы можете достичь этого только с одной меткой, связанной с вашими полями. Если вы хотите создать собственный валидатор для этого, это должен быть пост-валидатор (см. SfValidatorSchemaCompare для примера), поскольку валидаторы поля получают только одно значение для валидации. При таком подходе вы получите в итоге:
- определяя на одну форму меньше виджета
- перемещение функции проверки сообщений в отдельный класс
и потеря:
- метка для вашего поля подтверждения пароля
Встроенная форма
Мне кажется, что встроенная форма не подходит для этого, поскольку поля пароля / подтверждения не являются подразделом родительского элемента.
Наследование
Другой подход, который может работать для вас, - это создать класс sfPasswordEditForm
, который могут расширяться вашими формами, который определяет два поля пароля и пост валидатор. Затем вы можете использовать метод moveField из вашего widgetSchema
, чтобы расположить поля в нужном вам порядке в вашей пользовательской форме:
$this->widgetSchema->moveField('password', 'after', 'username');
$this->widgetSchema->moveField('password_again', 'after', 'password');