【问题标题】:Input password blank override user password输入密码空白覆盖用户密码
【发布时间】:2013-12-30 04:44:46
【问题描述】:

我正在为我的应用开发用户个人资料部分。我有一个密码字段允许用户更改您的密码。

我对此有疑问。当用户填写密码输入时,您的密码将正确更新。但是当用户没有填写输入时,用户密码设置为空值。

我喜欢如果该用户不填写输入,请保留当前密码。

这是我的表单定义:

$builder
            ->add('email','text',array(
                'required' => false
            ))
            ->add('clave','password', array(
                'required' => false,
                'always_empty' => true
            ))
            ->add('reClave','password',array(
                'mapped' => false,
                'required' => false
            ))
            ->add('telefonos','collection', array(
                'type' => new TelefonoType(),
                'required' => false,
                'allow_add' => true,
                'allow_delete' => true
            ))
            ->add('submit', 'submit')
            ->add('reset', 'reset')
        ;

注意:我不使用 FOSUserBundle。

有什么想法吗?

【问题讨论】:

  • 你不能在将密码插入数据库时​​添加一个检查吗?比如 if(!empty($password)) // 插入
  • @TejasGosai 感谢您的回复...我不考虑这个。是个好主意。谢谢!
  • 您可以发布您的操作代码(您在哪里验证表单)?使用表单框架可能有更聪明的方法。
  • 欢迎!.. 但正如@maphe 建议的那样,您应该使用 2 种不同形式的密码和其他详细信息。

标签: forms symfony change-password


【解决方案1】:

就像@Tejas 建议的那样,如果您的参数为空,您可以检查您的User::setPassword() 函数,并且仅在不是时才设置它。但这不是最好的方法,因为您覆盖了实体中的表单约束(密码的 NotBlank 约束)。

更好、更简单的解决方案是在您的个人资料版本页面上显示两个单独的表单。第一个用于公共数据,第二个用于密码更新。然后您可以在您的字段上设置NotBlank 约束,如果不是,则将其设为repeated 类型(doc here),还可以添加更多约束,例如“超过 6 个字符”(Range)或“至少是字母和数字" (Regex)。

最后一个解决方案是使用Form Events 根据您的表单控制您的验证规则:创建或版本。但操作起来更复杂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多