代码之家  ›  专栏  ›  技术社区  ›  Stephen Melrose

symfony表单框架-实现更改密码功能的最佳方法?

  •  2
  • Stephen Melrose  · 技术社区  · 15 年前

    我正试图让我的头 symfony 1.4中的表单框架 . 我已经读了难以置信的 detailed section 在《关于symfony的更多》一书中,我仍然是一个但不确定如何实现简单的“更改密码”功能的人。

    要求很基本,

    1. 会有两个区域, new_password confirm_new_password . 这两个都是输入字段。
    2. 这个 新密码 字段将被验证为包含字母和数字的6到30个字符之间的字符串。
    3. 这个 确认新密码 将验证字段以匹配 新密码 准确地说。

    现在,我通过

    • 向我的窗体添加2个新字段。
    • 向添加字符串验证程序 新密码 用于检查字符串长度的字段。
    • 向添加字符串验证程序 确认新密码 字段以确保已填写。
    • 然后验证新密码是有效的,并与自定义后验证程序中的确认密码匹配。我这样做是因为我不想验证 确认新密码 字段直到 新密码 字段有效。

    现在 就我的问题而言 . 在阅读了上面提到的文章之后,我开始认为我应该将这两个字段包含在单个小部件或子表单中,因为它们彼此严重依赖,并且一个字段没有另一个字段是无用的。

    我想知道人们对此有什么看法,如果有人实施了,他们是怎么做到的?

    谢谢

    注: 没有 current_password 字段,因为这是我的管理区域。

    4 回复  |  直到 15 年前
        1
  •  6
  •   Alexandre Salomé    15 年前

    你可以使用 sfDoctrineGuardPlugin .

    这个插件为您的网站用户管理提供了方便的表单、模型和控制器。

    你可以扩展这个插件,自定义以满足你的需要,这是一个非常常用的插件(最常用)。

        2
  •  0
  •   Felix Kling    15 年前

    我为symfony 1.2创建了某种密码验证器(我还没有为1.4测试它)。你可以看一下 here .

    其基本特点是:

    • 根据正则表达式或多个正则表达式验证密码。
    • 比较两个字段中的值是否相同。
    • 如果已经设置了密码,则无需填写密码字段即可进行验证(如果密码更改字段集成在配置文件表单中,则很方便,如果不想更改密码,则字段可以为空)。

    要使用它,您必须设置两个输入字段,并添加验证器作为这两个字段的后验证器。

    这不完全是你想要的,但也许它给了你一个开始。

        3
  •  0
  •   nortron    15 年前

    我没有听说有什么东西可以为你处理这个问题。

    自定义小部件和验证程序

    您可以创建一个定制的小部件来封装这两个表单字段,只要您可以用与字段关联的一个标签来实现这一点。如果要为此创建自定义验证器,它必须是后验证器(例如,请参阅sfvalidatorschemacompare),因为字段验证器只接收一个要验证的值。通过这种方法,你最终会得到:

    • 在表单中定义少一个小部件
    • 将后验证程序功能移动到单独的类中

    和损失:

    • 确认密码字段的标签

    嵌入形式

    在我看来,嵌入表单是错误的,因为密码/确认字段不是父元素的子部分。

    继承

    另一种可能对您有用的方法是创建 sfPasswordEditForm 定义两个密码字段和后验证程序的窗体可以扩展的类。然后您可以使用 moveField 你的方法 widgetSchema 要按自定义表单中所需的顺序放置字段,请执行以下操作:

    $this->widgetSchema->moveField('password', 'after', 'username');
    $this->widgetSchema->moveField('password_again', 'after', 'password');
    
        4
  •  0
  •   Stephen Melrose    15 年前

    一些人建议看 sfGuardPlugin . 在这样做之后,我注意到它实现了更改密码功能,这与我当前实现它的方式差不多。

    谢谢你的回答!