Symfony2 - FOSUserBundle - 检查自定义重置页面上的密码确认不匹配

时间:2015-01-29 20:49:32

标签: symfony fosuserbundle

我正在构建一个自定义表单供用户重置密码。除了检查密码不匹配外,一切都已完成。当2个输入的字段不匹配时没有给出错误 - 但表单将重新加载为空,所以我知道它已被捕获

在vars转储表单中我有{{dump(form.new.first.vars.errors)}}

array(1) {
[0]=>
object(Symfony\Component\Form\FormError)#251 (4) {
["message":"Symfony\Component\Form\FormError":private]=>
string(26) "fos_user.password.mismatch"
["messageTemplate":protected]=>
string(26) "fos_user.password.mismatch"
["messageParameters":protected]=>
array(1) {
  ["{{ value }}"]=>
  string(5) "array"
}
["messagePluralization":protected]=>
NULL
 }

}

以下是我如何显示表格

<div class="container">
<div class="row">
    <div class="col-sm-4 single">
        <div class="panel r-panel panel-default">
            <div class="panel-heading"> 
                <h1>Enter New Password</h1>
            </div>
            <div class="panel-body">
              <form action="{{ path('fos_user_resetting_reset', {'token': token}) }}" {{ form_enctype(form) }} method="POST" class="fos_user_resetting_reset">
               <div class="form-group">
                  <label for="{{form.new.first.vars.id}}"> Password
                     <span class="text-primary">*</span>
                  </label>
                  {{ form_widget(form.new.first, {'attr': {'class': 'form-control'}}) }}   
              </div>
                 <label for="{{form.new.second.vars.id}}"> Confirm
                   <span class="text-primary">*</span>
                 </label>
                {{ form_widget(form.new.second, {'attr': {'class': 'form-control'}}) }}   
              </div>
            <input type="submit" value="Reset Password" />
          </div>
         {{ form_end(form) }}
        </div>
        </div>
    </div>
</div>

我希望在twig代码中我可以添加类似

的内容
{% if passwords_mismatch %} ERROR! {% endif %}

2 个答案:

答案 0 :(得分:1)

您还可以尝试使用Symfony2表单可用的重复表单类型。 这可以替换您使用的2个输入字段。 重复的表单字段显示2个输入字段,并检查它们是否相等。

您应该将'error_bubbling' => true添加到重复字段

有关重复表单类型的详细信息,请参阅:http://symfony.com/doc/current/reference/forms/types/repeated.html

例如:

$builder->add('new', 'repeated', array(
            'type' => 'password',
            'options' => array('translation_domain' => 'DocdataUserBundle'),
            'first_options' => array('label' => 'Password'),
            'second_options' => array('label' => 'Repeat password'),
            'invalid_message' => 'fos_user.password.mismatch',
            'error_bubbling' => true
        ))

答案 1 :(得分:0)

  ->add('plainPassword', 'repeated', array(
                'type' => 'password',
                'options' => array('translation_domain' => 'FOSUserBundle'),
                'first_options' => array('label' => 'form.password'),
                'second_options' => array('label' => 'form.password_confirmation'),
                'invalid_message' => 'fos_user.password.mismatch'))