2016-04-10 33 views
0

Kullanıcı ve profil durumu arasında çoktan çoğa ilişkisi olan 2 form var. Her şey çalışıyor ama aşağıdaki kodla açısal bir json nesnesi kullanarak bir koleksiyon mesaj gönderemezsiniz: olduğu gibi 200 HTTP Status ile bir tepki üretir ancak kullanıcılar ve profilestatuses arasında hiçbir ilişki aşağıdaFOSRestBundle üzerinden bir koleksiyon gönderme RESTful API çalışmıyor

/* 
* 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"); 
    }); 
}; 

sınıflarını kullanma veritabanında oluşturuldu. Muhtemelen kullanıcıyı ayrıştırabilir ve nesneleri sıraya dizebilir ve programlı olarak ekleyebilirim ama sihirli bir mermi çözümü olmasını umuyorum. koleksiyonları desteklemek için

Ek Kodu: my ProfileStatuses.php içinde kodunun değiştirilmesi

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'; 
    } 
} 

altına aşağıdaki 400 HTTP durum hatası üretir

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

400 Hatası Yanıtı

{ 
    "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": {} 
     } 
    } 
} 

cevap

1

deneyin toplama tipi alanı için öznitelik by_reference kullanmak

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