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

Php Symfony表单框架-实现更改密码功能的最佳方法?,php,forms,frameworks,symfony1,Php,Forms,Frameworks,Symfony1,我正试图了解Symfony 1.4中的表单框架。我在“更多使用symfony”一书中读到了令人难以置信的内容,但我仍然不确定如何实现简单的“更改密码”功能 要求很基本, 将有两个字段,new\u password,和confirm\u new\u password。这两个字段都是输入字段 new\u password字段将被验证为包含字母和数字的6到30个字符的字符串 confirm\u new\u password字段将被验证为与new\u password字段完全匹配 现在,现在我通过,

我正试图了解Symfony 1.4中的表单框架。我在“更多使用symfony”一书中读到了令人难以置信的内容,但我仍然不确定如何实现简单的“更改密码”功能

要求很基本,

  • 将有两个字段,
    new\u password
    ,和
    confirm\u new\u password
    。这两个字段都是输入字段
  • new\u password
    字段将被验证为包含字母和数字的6到30个字符的字符串
  • confirm\u new\u password
    字段将被验证为与
    new\u password
    字段完全匹配
  • 现在,现在我通过,

    • 向我的表单中添加2个新字段
    • 将字符串验证器添加到
      new_password
      字段以检查字符串长度
    • 将字符串验证器添加到
      confirm\u new\u password
      字段以确保已填写该字段
    • 然后验证新密码是否有效,并与自定义post验证器中的确认密码相匹配。我这样做是因为在
      new\u password
      字段有效之前,我不想验证
      confirm\u new\u password
      字段
    现在转到我的问题。在阅读了上面提到的文章之后,我开始认为我应该将这两个字段包含在一个小部件或子表单中,因为它们相互依赖,没有另一个字段,一个字段是无用的

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

    谢谢


    注意:没有
    当前\u密码
    字段,因为这是我的管理区域。

    我为symfony 1.2创建了某种密码验证程序(我还没有对1.4进行测试)。你可以看看

    其基本特点是:

    • 根据一个或多个正则表达式验证密码
    • 比较两个字段中的值是否相同
    • 如果已经设置了密码,则不必填写密码字段以进行验证(如果密码更改字段集成在配置文件表单中,则很方便,如果不想更改密码,则字段可以为空)
    要使用它,您必须设置两个输入字段,并将验证器添加为这两个字段的后验证器

    这并不完全是你想要的,但可能会给你一个开始。

    你可以使用

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


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

    我还没有听说有任何已经为您构建的插件

    自定义小部件和验证程序

    您可以创建一个自定义小部件来封装这两个表单字段,只要您只需要一个与字段关联的标签就可以实现。如果您想为此创建自定义验证器,那么它必须是后验证器(请参见sfValidatorSchemaCompare示例),因为字段验证器只接收一个要验证的值。通过这种方法,您最终将获得:

    • 在表单中定义一个小部件
    • 将后验证器功能移动到单独的类中
    以及损失:

    • 确认密码字段的标签
    嵌入式表单

    对于这一点,嵌入式表单似乎是错误的,因为password/confirm字段不是父元素的一个子部分

    继承

    另一种可能适用于您的方法是创建一个
    sfPasswordEditForm
    类,您的表单可以扩展该类,该类定义两个密码字段和后验证器。然后,您可以使用
    widgetSchema
    的方法将字段按您希望的顺序放置在自定义表单中:

    $this->widgetSchema->moveField('password', 'after', 'username');
    $this->widgetSchema->moveField('password_again', 'after', 'password');
    

    有几个人建议去看电视。在这样做之后,我注意到它实现了更改密码功能,这与我目前实现它的方式非常接近


    谢谢你的回答

    我不认为sfGuard包含“更改密码”功能。编辑:我的观点是正确的,似乎是这样。我认为合并比继承更好。