2017-09-28 11 views
0

심포니에서 JMS 그룹 내의 필드를 어떻게 직렬화 할 수 있습니까?그룹 내의 일련 값 jms symfony

return $this->json($products, Response::HTTP_CREATED, [], 
     ['groups' => ['user']]); 

그래서 모든 사용자 세부 정보가 아닌 사용자 ID 만 직렬화되기를 원합니다. 아이디어가 있으십니까?

편집 : json() 메소드는 ControllerTrait에 속합니다.

답변

0

ControllerTrait::json 기능은 symfony/serializer이 아니고 jms/serializer이 아닙니다.

JMS 직렬화 기는 복잡한 직렬화/직렬화 해제를 실행하는 수단을 제공하지만 Symfony의 직렬화기에는 이러한 기능의 하위 집합 만 있습니다.

Symfony\Component\Serializer\Annotation\Groups 

대신 : 당신은 아마 확인하여 사용하기 위해선,이 JMS의 시리얼없이 도망 할 수

JMS\Serializer\Annotation\Groups 

class User 
{ 
    /** 
    * @Groups({"simple", "super_simple"}) 
    */ 
    private $id; 

    /** 
    * @Groups({"full"}) 
    */ 
    private $username; 

    /** 
    * @Groups({"full"}) 
    */ 
    private $token; 

    /** 
    * @var Role 
    */ 
    private $role; 
} 

class Role{ 
    /** 
    * @Groups({"simple"}) 
    */ 
    private $id; 

    /** 
    * @Groups({"full"}) 
    */ 
    private $description; 
} 

을 그리고 당신은 할 수 해야 할 일 :

$role = new Role(1, "Some role"); 
$user = new User(1, "foo", "bar", $role); 

// Returns ids of both User and Role 
$ids = $this->json($user, Response::HTTP_CREATED, [], ['groups' => ['simple']]); 

// Returns id of User entity only (note the different group) 
$ids = $this->json($user, Response::HTTP_CREATED, [], ['groups' => ['super_simple']]); 

그냥 직렬화 주석이 활성화되어 있는지 확인하십시오 (framework). serializer. enable_annotations : true 당신의 config.yml)

에이의 문서를 참조하십시오 :

https://symfony.com/doc/current/serializer.html#using-serialization-groups-annotations

희망이 조금 도움이 ...

+0

좋아,하지만 여전히, 내가 심포니를 사용할 경우/시리얼 방법 전체 사용자가 아닌 사용자 엔터티의 ID 만 추출 할 수 있습니까? 나는 다음과 같은 것을 시도했다 : [ 'groups'=> [ 'user']. [ 'id']] 분명히 그것의 작동하지 않는다 .. – IleNea

+1

위의 업데이트를 보아라. –

+0

글쎄, 나는 당신의 접근법을 이해하지만, [ 'groups'] => [ 'consumer'] 주석이 달린 다른 클래스의 필드는 어떻게 표시 할 수 있습니까? 그게 내가 성취하려고 시도한 것입니다. – IleNea