Search code examples
formsvalidationtwigsymfony4password-confirmation

Invalid message doesn't show when password doesn't match its confirmation


I'm trying to display an error message when password doesn't match its confirmation.

Here is the relevant code in the form class file:

->add('password', RepeatedType::class, array(
            'required' => true,
            'invalid_message' => 'Le mot de passe et sa confirmation ne sont pas identiques',
            'type' => PasswordType::class,
            'first_options' => array('label' => false),
            'second_options' => array('label' => false),
        ))

And here is the relevant Twig code:

<div class="control-group">
                    <div class="input-prepend">
                        {{ form_row(registrationForm.password.first ,{'label':false,'attr':{'placeholder':'Mot de passe', 'name':'password1', 'class':'form-control', 'id':'password1', 'required data-error':'Veuillez saisir votre mot de passe'} } ) }}
                    </div>
                </div>
                <div class="control-group">
                    <div class="input-prepend">
                        {{ form_row(registrationForm.password.second ,{'label':false,'attr':{'placeholder':'Confirmation mot de passe', 'name':'password2', 'class':'form-control', 'id':'password2', 'required data-error':'Veuillez confirmer votre mot de passe'} } ) }}
                    </div>
                </div>

The issue is that when putting different passwords then validating the form, the expected message error doesn't show. Any idea about how to fix that?


Solution

  • I've fixed it! I've changed this line 'first_options' => array('label' => false), to this one 'first_options' => array('label' => false,'error_bubbling' => true), in my form class file. So, its code has been changed like so:

    ->add('password', RepeatedType::class, array(
            'required' => true,
            'invalid_message' => 'Le mot de passe et sa confirmation ne sont pas identiques',
            'type' => PasswordType::class,
            'first_options' => array('label' => false,'error_bubbling' => true),
            'second_options' => array('label' => false),
        ))
    

    Besides, I've added this line <span class="Errormessage" style="color: red;text-align: right">{{ form_errors(registrationForm.password) }}</span> in my HTML\Twig code like so:

    <div class="control-group">
         <div class="input-prepend">
              {{ form_row(registrationForm.password.first ,{'label':false,'attr':{'placeholder':'Mot de passe', 'name':'password1', 'class':'form-control', 'id':'password1', 'required data-error':'Veuillez saisir votre mot de passe'} } ) }}
              <span class="Errormessage" style="color: red;text-align: right">{{ form_errors(registrationForm.password) }}</span>
         </div>
    </div>
    <div class="control-group">
        <div class="input-prepend">
             {{ form_row(registrationForm.password.second ,{'label':false,'attr':{'placeholder':'Confirmation mot de passe', 'name':'password2', 'class':'form-control', 'id':'password2', 'required data-error':'Veuillez confirmer votre mot de passe'} } ) }}
        </div>
    </div>