2017-09-22 1 views
1

J'ai utilisé cette answer pour créer un formulaire pour une liste d'entités avec une case à cocher sur chaque ligne:Envoyer élargi EntityType terrain avec ajax

Formulaire

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('sites', EntityType::class, [ 
     'required'  => false, 
     'class'   => Site::class, 
     'choice_label' => function($site){ 
      return '['.$site->getId().']'; 
     }, 
     'multiple'  => true, 
     'expanded'  => true 
    ]); 

} 

Brindille:

{% for site in sites %} 
<tr> 
    <td>{{ form_widget(actionform.sites[site.getId]) }}</td> 

Cependant, je ne peux pas soumettre le droit ajax:

Actuellement j'utilise:

$.post(
     '{{ path('site_add_to_upgrade', { 'page': page }) }}', 
      { 
       'site_action_form[_token]': '{{ actionform._token.vars.value }}', 
       'site_action_form[sites]': $('.itemlist input[name^="site_action_form"]:checked').serialize() 
      } 
) 

mais cela jette un l'erreur:

\Symfony\component\Form\FormError 
message: This value is not valid 
messageParameters: 
    {{ value }}: site_action_form%5Bsites%5D%5B%5D=4 

Comment puis-je soumettre ces cases à cocher, donc je peux boucle à travers eux?

+0

Pour référence à toute personne aidant, le codage URL décodé dans le message d'erreur est: 'site_action_form [des sites] [] = 4' –

+0

Je ne pense pas, vous devez passer' site_action_form [ _token] 'manuellement en ajax. Il doit avoir été masqué lorsque 'FormType' est rendu. – Jeet

Répondre

1

Je voudrais diviser le travail en deux parties: 1 - Assurez-vous que le formulaire fonctionne lors de l'envoi en synchronisation. 2 - Envoyez votre formulaire comme utilise ajax:

$(this).on('submit', '#wrapper_id > form', function(event){ 
    event.preventDefault(); 
    var form = $(this); 
    var url = form.attr('action'); 
    var data = form.serialize(); 
    $.post(url, data, function(data) { 
     //process with return data 
    }); 
}); 

Pour les enregistrements, ce qui est plus une question jQuery qu'un symfony ou ajax un.

Hope this helps