我试图了解Symfony 1.4中的表单框架。我在“更多与symfony”一书中读到了令人难以置信的detailed section,但我仍然不确定如何实现简单的“更改密码”功能。
要求非常基本,
new_password
和confirm_new_password
。两者都是输入字段。new_password
字段将被验证为包含字母和数字的6到30个字符之间的字符串。confirm_new_password
字段将经过验证,与new_password
字段完全匹配。现在,我实现了这个,
new_password
字段以检查字符串长度。confirm_new_password
字段以确保其已填写。confirm_new_password
字段有效之前我不想验证new_password
字段。现在到我的问题。在阅读了上面提到的文章后,我开始认为我应该在单个小部件或子形式中包含两个字段,因为它们相互依赖,而没有另一个则没用。
我想知道人们对此的看法是什么,如果有人实施过,他们是如何做到的?
由于
注意:没有current_password
字段,因为这是我的管理区域。
答案 0 :(得分:6)
答案 1 :(得分:0)
我为symfony 1.2创建了某种密码验证器(我没有为1.4测试过它)。您可以查看here。
基本功能是:
要使用它,您必须设置两个输入字段并将验证器添加为这两个字段的后验证器。
这不完全是你想要的,但也许它会给你一个开始。
答案 2 :(得分:0)
我还没有听说过任何已经为你处理此事的内容。
自定义小部件和验证程序
您可以创建一个自定义小部件来封装两个表单字段,只要您只需一个与您的字段关联的标签即可实现此目的。如果您想为此创建自定义验证器,则必须是后验证器(请参阅sfValidatorSchemaCompare作为示例),因为字段验证器仅接收一个要验证的值。通过这种方法,您最终会获得:
失去了:
嵌入表格
对于我来说,嵌入式表单似乎不对,因为密码/确认字段不是父元素的子部分。
<强>继承强>
另一种可能适合您的方法是创建一个sfPasswordEditForm
类,您的表单可以扩展该类,定义您的两个密码字段并发布验证器。然后,您可以使用widgetSchema
的{{3}}方法将字段按照您希望的顺序放置在自定义表单中:
$this->widgetSchema->moveField('password', 'after', 'username');
$this->widgetSchema->moveField('password_again', 'after', 'password');
答案 3 :(得分:0)
有些人建议查看sfGuardPlugin。在这样做之后,我注意到它实现了更改密码功能,几乎就是我目前正在实现它的方式。
感谢您的回答!