2017-09-16 1 views
1

J'utilise Symfony 3.3.9 et quand je suis en train de rendre une forme que j'ai l'erreur suivante:Impossible de rendre la forme parce que le tableau de noms de bloc contient des doublons

An exception has been thrown during the rendering of a template ("Unable to render the form because the block names array contains duplicates: "_fos_user_registration_form_errors", "user_errors", "user_errors", "fos_user_registration_errors", "form_errors".").

enter image description here

Merci d'avance pour votre aide!

EDIT 17/09/2017 vous allez ici:

public function indexAction() 
{ 
    /** @var $formFactory FactoryInterface */ 
    $formFactory = $this->get('fos_user.registration.form.factory'); 

    $form = $formFactory->createForm(); 

    return $this->render('AppTMMainBundle:Default:index.html.twig', array(
     'form' => $form->createView(), 
    )); 
} 

Mon Twig:

{{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register')}) }} 
<div class="card-content"> 
    <h3 class="text-center title" style="color: #3C4858;margin:10px 0;">Inscription</h3> 
    <div class="social text-center"> 
     <a class="btn btn-just-icon btn-round btn-facebook" href="{{ path('hwi_oauth_service_redirect',{'service': 'facebook'}) }}"> 
      <i class="fa fa-facebook"> </i> 
     </a> 
     <a class="btn btn-just-icon btn-round btn-twitter" href="{{ path('hwi_oauth_service_redirect',{'service': 'twitter'}) }}"> 
      <i class="fa fa-twitter"></i> 
     </a> 
     <a class="btn btn-just-icon btn-round btn-google" href="{{ path('hwi_oauth_service_redirect',{'service': 'google'}) }}"> 
      <i class="fa fa-google-plus"></i> 
     </a> 
    </div> 
    <p class="description text-center">Ou de façon plus classique</p> 
    <div class="row"> 
     <div class="col-xs-6"> 
      {{ form_label(form.firstname) }} 
      {{ form_widget(form.firstname) }} 
     </div> 
     <div class="col-xs-6"> 
      {{ form_label(form.lastname) }} 
      {{ form_widget(form.lastname) }} 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-xs-12"> 
      {{ form_label(form.email) }} 
      {{ form_widget(form.email) }} 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-xs-6"> 
      {{ form_widget(form.plainPassword.first, {'attr': {'class': 'form-control', 'placeholder': 'form.password'}}) }} 
     </div> 
     <div class="col-xs-6"> 
      {{ form_widget(form.plainPassword.second, {'attr': {'class': 'form-control', 'placeholder': 'form.password_confirmation'}}) }} 
     </div> 
    </div> 

    <!-- If you want to add a checkbox to this form, uncomment this code --> 
    <div class="input-group"> 
     <div class="checkbox"> 
      <label> 
       <input type="checkbox" name="optionsCheckboxes" checked=""> 
       {{ 'index.proceed.agree'|trans }} <a href="{{ path('tm_main_policies_terms') }}">{{ 'index.proceed.cgu'|trans }}</a>. 
      </label> 
     </div> 
    </div> 
    <div class="footer text-center"> 
     <input type="submit" class="btn btn-primary btn-round" value="{{ 'index.action.subscribe'|trans }}"> 
    </div> 
</div> 
{{ form_end(form) }} 
+1

Pourriez-vous inclure votre formulaire et votre modèle de brindille dans votre question? – Strnm

+1

On dirait que vous avez défini 'user_rest' deux fois dans votre formulaire. Pouvez-vous montrer le code du formulaire? –

+0

Mise à jour post! :) – Liogate

Répondre

0

J'ai trouvé la réponse à ma question.

Cela provenait de ma classe RegistrationType où j'essayais d'étendre avec une autre classe de type. getParent ne fonctionne pas aussi bien attendre ...

RegistrationType> UserType > FOS \ UserBundle \ Form \ type \ RegistrationFormType

Je passe tous les champs de UserType dans RegistrationType et cela fonctionne :)

3

pour Toute personne ayant une telle exception:

Vous ne devriez probablement pas étendre un type de formulaire, mais créez plutôt le votre et utilisez getParent pour hériter du comportement. Et si votre nom de classe est identique à un autre type (à l'exclusion des espaces de noms) , vous devez remplacer le getBlockPrefix de AbstractType.

La méthode getBlockPrefix de AbstractType utilise la dernière partie de fqcn (le nom de classe) et vous pouvez avoir un nom de bloc en double.