Symfony Form Framework - Лучший способ реализовать функцию смены пароля? - PullRequest
2 голосов
/ 30 января 2010

Я пытаюсь разобраться с формой в Symfony 1.4 . Я прочитал невероятный подробный раздел в книге «Еще с symfony», но я все еще не уверен, как реализовать простую функциональность «Смена пароля».

Требования довольно простые,

  1. Будет два поля: new_password и confirm_new_password. Оба будут полями ввода.
  2. Поле new_password будет проверено как строка длиной от 6 до 30 символов, содержащая как буквы, так и цифры.
  3. Поле confirm_new_password будет проверено, чтобы точно соответствовать полю new_password.

Теперь я реализовал это,

  • Добавление 2 новых полей в мою форму.
  • Добавление валидатора строки в поле new_password для проверки длины строки.
  • Добавление валидатора строки в поле confirm_new_password, чтобы убедиться, что оно заполнено.
  • И затем проверка нового пароля действительна и соответствует подтверждению пароля в пользовательском пост-валидаторе. Я сделал это, потому что не хотел проверять поле confirm_new_password до тех пор, пока поле new_password не станет действительным.

Теперь к вопросу моего вопроса . После прочтения статьи, упомянутой выше, я начинаю думать, что должен содержать два поля либо в одном виджете, либо в форме, так как они сильно зависят друг от друга, а одно бесполезно без другого.

Мне было интересно, что люди думают об этом, и если кто-то реализовал один, как они это сделали?

Спасибо

Примечание: Поле current_password отсутствует, так как это для моей административной области.

Ответы [ 4 ]

6 голосов
/ 30 января 2010

Вы можете использовать sfDoctrineGuardPlugin .

Этот плагин предоставляет удобные формы, модели и контроллеры для управления пользователями вашего сайта.

Вы можете расширить этот плагин, настроить его под свои нужды, это очень часто используемый плагин (наиболее используемый).

0 голосов
/ 30 января 2010

Несколько человек предложили взглянуть на sfGuardPlugin . После этого я заметил, что он реализует функцию смены пароля в точности так, как я сейчас ее реализую.

Спасибо за ответы!

0 голосов
/ 30 января 2010

Я ничего не слышал о том, что уже сделано для вас.

Пользовательский виджет и валидатор

Вы можете создать пользовательский виджет, который будет инкапсулировать два поля формы, если вы можете достичь этого только с одной меткой, связанной с вашими полями. Если вы хотите создать собственный валидатор для этого, это должен быть пост-валидатор (см. SfValidatorSchemaCompare для примера), поскольку валидаторы поля получают только одно значение для валидации. При таком подходе вы получите в итоге:

  • определяя на одну форму меньше виджета
  • перемещение функции проверки сообщений в отдельный класс

и потеря:

  • метка для вашего поля подтверждения пароля

Встроенная форма

Мне кажется, что встроенная форма не подходит для этого, поскольку поля пароля / подтверждения не являются подразделом родительского элемента.

Наследование

Другой подход, который может работать для вас, - это создать класс sfPasswordEditForm, который могут расширяться вашими формами, который определяет два поля пароля и пост валидатор. Затем вы можете использовать метод moveField из вашего widgetSchema, чтобы расположить поля в нужном вам порядке в вашей пользовательской форме:

$this->widgetSchema->moveField('password', 'after', 'username');
$this->widgetSchema->moveField('password_again', 'after', 'password');
0 голосов
/ 30 января 2010

Я создал какой-то валидатор паролей для symfony 1.2 (я не тестировал его для 1.4). Вы можете посмотреть на это здесь .

Основные характеристики:

  • Проверяет пароль на соответствие регулярному выражению или нескольким регулярным выражениям.
  • Сравнивает, являются ли значения в обоих полях одинаковыми.
  • Если пароль уже установлен, поля пароля не нужно заполнять для проверки (удобно, если поля смены пароля интегрированы в форму профиля, где поля могут быть пустыми, если не требуется изменение пароль).

Чтобы использовать его, вы должны настроить два поля ввода и добавить валидатор в качестве пост-валидатора для этих двух полей.

Это не совсем то, что вы хотите, но, возможно, это даст вам начало.

...