2016-04-10 13 views
0

Ich habe zwei Formulare mit einer Viele-zu-viele-Beziehung zwischen Benutzer- und Profilstatus. Alles funktioniert gut, aber ich kann nicht eine Sammlung mit einem Json Objekt aus Winkel mit dem folgenden Code schreiben:Senden einer Sammlung über FOSRestBundle RESTful-API funktioniert nicht

/* 
* Update Status 
*/ 
$scope.updateProfilestatus = function() { 
    var user = []; 
    user.push($scope.user.id); 
    var status = 
    { 
     body: $scope.status, 
     enabled: 1, 
     user: user 
    }; 

    alert('Tests'); 
    console.log(status); 
    TGWebService.profilestatuses.getAll.post(status).then(function (result) { 
     console.log(result); 
     alert("New Status Created"); 
    }); 
}; 

Unter Verwendung der unten angegebenen Klassen als eine Antwort mit 200 HTTP-Status erzeugen aber kein Zusammenhang zwischen den Nutzern und profilestatuses ist in der Datenbank erstellt. Ich könnte den Benutzer wahrscheinlich analysieren und die Objekte deserialisieren und sie programmatisch hinzufügen, aber ich hoffe auf eine Zauberkugellösung.

ProfileStatusesType.php

class ProfileStatusesType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('body') 
      ->add('created', 
       'datetime', array('widget' => 'single_text', 'date_format' => 'YYYY-MM-DD hh:mm:ss')) 

      ->add('updated', 
       'datetime', array('widget' => 'single_text', 'date_format' => 'YYYY-MM-DD hh:mm:ss')) 
      ->add('enabled') 
      ->add('user') 
     ; 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'TeamGraduate\APIBundle\Entity\ProfileStatuses' 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return 'teamgraduate_apibundle_profilestatuses'; 
    } 
} 

users.php

class UsersType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('firstName') 
      ->add('lastName') 
      ->add('birthdate', 
       'datetime', array('widget' => 'single_text', 'date_format' => 'YYYY-MM-DD')) 
      ->add('created', 
       'datetime', array('widget' => 'single_text', 'date_format' => 'YYYY-MM-DD hh:mm:ss')) 
      ->add('updated', 
       'datetime', array('widget' => 'single_text', 'date_format' => 'YYYY-MM-DD hh:mm:ss')) 
      ->add('profileStatus') 
     ; 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'TeamGraduate\APIBundle\Entity\Users' 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return 'teamgraduate_apibundle_users'; 
    } 
} 

den Code in meinem ProfileStatuses.php Ändern erzeugt den folgenden 400 HTTP-Statusfehler unter:

Zusatzcode für Sammlungen unterstützen

->add('user', 
       'collection', 
       array(
        'type'=> new UsersType(), 
        'prototype'=>true, 
        'allow_add'=>true, 
        'allow_delete'=>true, 
        'options'=>array(
        ) 
       ) 
      ) 

400 Error Response

{ 
    "code": 400, 
    "message": "Validation Failed", 
    "errors": { 
     "errors": ["This value is not valid."], 
     "children": { 
      "body": {}, 
      "created": {}, 
      "updated": {}, 
      "enabled": {}, 
      "user": { 
       "children": [{ 
        "children": { 
         "firstName": {}, 
         "middleName": {}, 
         "lastName": {}, 
         "birthdate": {}, 
         "postalAddress": {}, 
         "physicalAddress": {}, 
         "idPassportNumber": {}, 
         "telephone": {}, 
         "mobile": {}, 
         "institutionName": {}, 
         "created": {}, 
         "updated": {}, 
         "apiKey": {}, 
         "grade": {}, 
         "institutionUser": {}, 
         "gender": {}, 
         "location": {}, 
         "profileStatus": {}, 
         "view": {}, 
         "milestone": {}, 
         "reportCard": {}, 
         "device": {}, 
         "badge": {}, 
         "followerUser": {}, 
         "inspirationalQuote": {} 
        } 
       } 
       ] 
      }, 
      "cap": {} 
     } 
    } 
} 

Antwort

1

Try by_reference Attribut für die Sammlung Typ-Feld verwenden

->add('user', 'collection', [ 
     'type' => new UsersType(), 
     'by_reference' => false, 
     'prototype' => true, 
     'allow_add' => true, 
     'allow_delete' => true, 
    ])