Salut, j'ai envoyée un tableau d'objet par ajax ,voici code:
function AjouterPhoto() { 
    // la tu detecte ton dernier id mais tu sais aussi qu'il pars tjrs de 1 donc...
    var j = $('.trinfo').last().attr('id'); 
    // data n'est plus un objet, mais un tableau d'objet
    var $data = [];
    for (var k=1; k<=j; k++){
        $data.push({
            'nom': $('#nom'+k).val(),
            'prenom':$('#prenom'+k).val(),
            'age':$('#age'+k).val(),
            'sexe':$('#sexe'+k).val()
        });
        console.log($data);
    }
    $.ajax({
        type: "POST",
        url: "{{path('add')}}",
        data: $data,
        success: function() {
            alert("valide");
        }
    });
}
maintenant je peux récuperer les valeurs par symfony,voici code:
public function addAction() {
        $em = $this->getDoctrine()->getManager();
        $request = $this->getRequest();
        $nom = $request->request->get('nom');
        $prenom = $request->request->get('prenom');
        $age = $request->request->get('age');
        $class = $request->request->get('sexe');
           $cop = new Apps();  
        if ($request->getMethod() == 'POST') {
          $cop->setAge($age);
          $cop->setNom($nom);
          $cop->setPrenom($prenom);
          $cop->setClass($class);
          $cop->setPath("path test");
          $em->persist($cop);
          $em->flush();
        }
         return $this->render('TestBundle:Apps:form.html.twig');
        }
mais les valeurs du variable $nom,$age,$prenom etc sont null et c'est logique car j'envoyée tableau d'objet et pas une seule objet , quelle est la solution pour récupérer un tableau en symfony
merci d'avance
  On essaye encore,
Copie et code ce code.
public function addAction() {
        $em = $this->getDoctrine()->getManager();
        $request = $this->getRequest();
        $var =  json_decode($request->request->get('$data'),true);
        //C'était ici
        print_r($var);
        die;
        //Fin ici ...
        $nom = $var['nom'];
        $prenom = $var['prenom'];
        $age = $var['age'];
        $class = $var['class'];
           $cop = new Apps();  
        if ($request->getMethod() == 'POST') {
          $cop->setAge($age);
          $cop->setNom($nom);
          $cop->setPrenom($prenom);
          $cop->setClass($class);
          $cop->setPath("path test");
          $em->persist($cop);
          $em->flush();
        }
         return $this->render('MedBundle:Apps:form.html.twig');
        }
    
  N'oublie pas de marque ce sujet comme lu en cliquant sur ce poste m'a aidé.
Et tu oeux supprimer les console.log et var_dump :)
  Moi perso, j'envoye un objet JSON en string, puis je le parse en JSON dans mon controller.
  Donc là, ton tableau $data :
jsonString = JSON.stringify({data: $data});
Et après, au controller, tu le parse en objet.
Ainsi tu peux récupérer facilement tes données.
EN JSON OBJET => json_decode($request->request->get('$data'));
EN ARRAY => json_decode($request->request->get('$data'),true);
  @MehdiKacim
voici code aprés modification:
code js:
function AjouterPhoto() { 
    // la tu detecte ton dernier id mais tu sais aussi qu'il pars tjrs de 1 donc...
    var j = $('.trinfo').last().attr('id'); 
    // data n'est plus un objet, mais un tableau d'objet
    var $data = [];
    for (var k=1; k<=j; k++){
        $data.push({
            'nom': $('#nom'+k).val(),
            'prenom':$('#prenom'+k).val(),
            'age':$('#age'+k).val(),
            'sexe':$('#sexe'+k).val()
        });
        console.log($data);
    }
    jsonString = JSON.stringify({data: $data});
    $.ajax({
        type: "POST",
        url: "{{path('add')}}",
        data: jsonString,
        success: function() {
            alert("valide");
        }
    });
}
code symfony:
public function addAction() {
        $em = $this->getDoctrine()->getManager();
        $request = $this->getRequest();
        $nom = $request->request->get('nom');
        $prenom = $request->request->get('prenom');
        $age = $request->request->get('age');
        $class = $request->request->get('sexe');
        $var =  json_decode($request->request->get('$data'),true);
           $cop = new Apps();  
        if ($request->getMethod() == 'POST') {
          $cop->setAge($var['age']);
          $cop->setNom($var['nom']);
          $cop->setPrenom($var['prenom']);
          $cop->setClass($var['class']);
          $cop->setPath("path test");
          $em->persist($cop);
          $em->flush();
        }
         return $this->render('MedBundle:Apps:form.html.twig');
        }
mais toujours la même probléme est que les valeur qui récupérer sont null
  C'est normal, tu post tes données mais impossible de la récupérer.
Je m'explique...
  $.ajax({
        type: "POST",
        url: "{{path('add')}}",
        data: jsonString, //Cette ligne
        success: function() {
            alert("valide");
        }
    });
là où j'ai marque cette ligne, tu envoyes bien tes données mais elle ne sont pas récupérées car tu ne défini pas le non de la variable postée.
essaye :
  $.ajax({
        type: "POST",
        url: "{{path('add')}}",
        data: '$data='+jsonString,
        success: function() {
            alert("valide");
        }
    });
Ici, tu remarques l'ajout de ceci: data: '$data='+jsonString,
Au niveau du controller, c'est avec ce non $data que au niveau du request $request->request->get('$data'); tu récupères la valeur. Mais l'idéale, renonnce cette variable pour enleve le $, j'ai peur d'un conflit après avec php...
Ceci sert donc plus à rien :
        $nom = $request->request->get('nom');
        $prenom = $request->request->get('prenom');
        $age = $request->request->get('age');
        $class = $request->request->get('sexe');
Et conne tu met en paramètre true, tu as un tableau.
essaye de faire après
$var =  json_decode($request->request->get('$data'),true); ceci :
$nom = $var['nom']; //etc...
    
  code js:
jsonString = JSON.stringify({data: $data});
    $.ajax({
        type: "POST",
        url: "{{path('add')}}",
        data: '$data='+jsonString,
        success: function() {
            alert("valide");
        }
    });
code symfony:
public function addAction() {
        $em = $this->getDoctrine()->getManager();
        $request = $this->getRequest();
        $var =  json_decode($request->request->get('$data'),true);
        $nom = $var['nom'];
        $prenom = $var['prenom'];
        $age = $var['age'];
        $class = $var['class'];
           $cop = new Apps();  
        if ($request->getMethod() == 'POST') {
          $cop->setAge($age);
          $cop->setNom($nom);
          $cop->setPrenom($prenom);
          $cop->setClass($class);
          $cop->setPath("path test");
          $em->persist($cop);
          $em->flush();
        }
         return $this->render('MedBundle:Apps:form.html.twig');
        }
probléme:
quelle est la solution maintenant ?
  Essaye de faire après faire c'est deux lignes:
print_r($var);
die;
Et colle moi ton tableau
  avec ce code il reste page blanc :
  public function addAction() {
        $em = $this->getDoctrine()->getManager();
        $request = $this->getRequest();
        $var =  json_decode($request->request->get('$data'),true);
        $nom = $var['nom'];
        $prenom = $var['prenom'];
        $age = $var['age'];
        $class = $var['class'];
           $cop = new Apps();  
        if ($request->getMethod() == 'POST') {
          $cop->setAge($age);
          $cop->setNom($nom);
          $cop->setPrenom($prenom);
          $cop->setClass($class);
          $cop->setPath("path test");
          $em->persist($cop);
          $em->flush();
        }
        print_r($var);
          die;
         return $this->render('MedBundle:Apps:form.html.twig');
        }
    
  Non, car tu génères des erreurs justement :
   $nom = $var['nom'];
        $prenom = $var['prenom'];
        $age = $var['age'];
        $class = $var['class'];
il faut mettre avant, ceci et après
$var = json_decode($request->request->get('$data'),true);
car au dessu $var est déclaré.
et le die; stop l'interprétation du code php, donc les erreurs juste en dessou sont pas là pour faire planter ton code.
  avec ce code:
        $em = $this->getDoctrine()->getManager();
        $request = $this->getRequest();
        $nom = $var['nom'];
        $prenom = $var['prenom'];
        $age = $var['age'];
        $class = $var['class'];
         $var = json_decode($request->request->get('$data'),true);
je trouve cette erreur:
Notice: Undefined variable: var
  avec ce code la travaille fonctionne bien
code twig et ajax:
<!DOCTYPE>
    <html>
    <head>
        <title></title>
    <style>
    td {
        width:25px;
        height:25px;
    }   
    </style>
    </head>
    <body>
    <table id="test" border="1">
        <thead>
            <th>test1</th>
            <th>test2</th>
            <th>test3</th>
            <th>test4</th>
            <th id="plus">+</th>
            <th id="moins">-</th>
        </thead>
        <tbody id="tbody">
        </tbody>
    </table>
    <button type="submit" onclick="AjouterPhoto();">Ajouter</button>
    <script src="https://code.jquery.com/jquery-3.1.1.js"></script>
    <script>
    $( document ).ready(function(i) {
        var i=0;
        $("#plus").click(function(){
            i++;
            $("#test #tbody").append('<tr class="trinfo" id="'+i+'"><td ><input id="nom'+i+'" type="text" placeholder="nom"></td><td ><input type="text" id="prenom'+i+'" placeholder="prenom"></td><td colspan="2"><input id="age'+i+'" type="text" placeholder="age"></td><td colspan="2"><input type="text" id="sexe'+i+'" placeholder="sexe"></td>');
        });
        $("#moins").click(function(){
            $("tr:last").remove();
            if (i>=0) {
            i--;}
        });     
    })
    function AjouterPhoto() { 
        // la tu detecte ton dernier id mais tu sais aussi qu'il pars tjrs de 1 donc...
        var j = $('.trinfo').last().attr('id'); 
    var data={};
                for(var k=1;k<=j;k++) {
                data['nom'+k]= $('#nom'+k).val(),
                data['prenom'+k]=$('#prenom'+k).val(),
                data['age'+k]=$('#age'+k).val(),
                data['sexe'+k]=$('#sexe'+k).val()
                data['k']= k; 
                      }
                console.log(data); 
        $.ajax({
            type: "POST",
            url: "{{path('add')}}",
            data: data,
            success: function($data) {
                console.log("valide");
            }
        });
    }
    </script>
    </body>
    </html>
code controller:
public function addAction() {
        $em = $this->getDoctrine()->getManager();
        $request = $this->getRequest();
        if ($request->getMethod() == 'POST') {
        $x= $request->request->get('k');
        var_dump($x);
          for( $i=1;$i<=$x;$i++){
        $nom = $request->request->get('nom'.$i);
        $prenom = $request->request->get('prenom'.$i);
        $age = $request->request->get('age'.$i);
        $class = $request->request->get('sexe'.$i); 
        var_dump($nom.' '.$prenom.' '.$age.' '.$class);
           $cop = new Apps();  
          $cop->setAge($age);
          $cop->setNom($nom);
          $cop->setPrenom($prenom);
          $cop->setClass($class);
          $cop->setPath("path test");
          $em->persist($cop);
          $em->flush();
           }
            } //end for
         return $this->render('MedBundle:Apps:form.html.twig');
        }
merci mon ami