2014-04-14 3 views
0

json 문자열을 내 엔티티 Poste에 매핑하고 싶습니다. 내가 jmsserializer로 역 직렬화하려고Symfony - json 문자열을 엔티티로 변환하는 방법

string(695) "{ 
       "id":2, 
       "user": { 
        "id":1, 
        "username":"tom.smith", 
        "email":"[email protected]" 
        // other properties of User class (FOSUserBundle) 
       }, 
       "description":"cool", 
       "nb_comments":0,"nb_likes":0, 
       "date_creation":"2014-04-13T20:07:34-0700", 
       "is_there_fashtag":false, 
       "fashtags":[] 
      }" 

: 여기

을 위해서 var_dump 내 json으로 출력

$postes[] = $serializer->deserialize($value, 'Moodress\Bundle\PosteBundle\Entity\Poste', 'json'); 

나는 오류가 있습니다

Catchable Fatal Error: Argument 1 passed to 
    Moodress\Bundle\PosteBundle\Entity\Poste::setUser() must be an instance of 
    Moodress\Bundle\UserBundle\Entity\User, array given 

을 왜 할 수없는 나 나입니다 간단한 엔티티 poste를 deserialize하려면?

감사

+0

JMS 직렬화 기의 올바른 노출/유형 메소드로 엔티티를 매핑 했습니까? http://jmsyst.com/libs/serializer/master/reference/annotations#type – coma

답변

1

Moodress\Bundle\PosteBundle\Entity\Poste에있는 당신의 $user 속성은 Moodress\Bundle\UserBundle\Entity\User을 의미합니다. setUser()은 배열이 아닌 사용자 객체 만 허용합니다.

먼저 'user'배열로 $user을 만든 다음 poste 객체에 전달해야합니다. 이 상황에서 내가 쓴 것보다 다른 방법으로하기가 어렵습니다. here.

$data = json_decode($yourJsonFile, true); 

$user = new User(); 
$user->setId($data['user']['id']); 
$user->setUsername($data['user']['username']); 
// … 

$poste = new Poste(); 
$poste->setId($data['id']); 
$poste->setDescription($data['description']); 
// … 
$poste->setUser($user); 
관련 문제