2017-12-15 12 views
0

symfony 프로젝트에서 JMS 시리얼 라이저를 사용하고 있으며 "Exlude condition"에 대한 질문이 있습니다. 엔티티의 한 속성이 실행되는 모든 경로 (메소드)에 대해 엔티티의 속성이 제외되도록 지정할 수 있습니까? 이 가능한 경우JMS 시리얼 라이저. Exclude 조건은 어떻게 사용합니까?

/** 
* @var string 
* 
* @ORM\Column(name="full_name", type="text", nullable=true) 
* @JMS\Exlude(if="!someAction()") 
*/ 
private $fullName; 

, 올바른 구문이 무엇이다 : 나는이 같은 말인가요? 감사합니다)

답변

0

@Exclude 주석을 사용하려면 Symfony의 ExpressionLanguage 이해가 약간 있어야합니다.

분명히 주석 (예 : someAction())에 사용 된 함수는 현재 객체가 아니라 표현식 언어 인스턴스에 속합니다. 당신의 시리얼에 바인딩 할

$language = new ExpressionLanguage(); 
$language->register('someAction', function(){}, function ($arguments, $object) { 

    // your logic goes here 

    return false; 
}); 

:에 등록하려면 다음을 수행

/** 
* @var string 
* 
* @ORM\Column(name="full_name", type="text", nullable=true) 
* @JMS\Exlude(if="!someAction(object)") 
*/ 
private $fullName; 

한 :

$serializer = SerializerBuilder::create() 
    ->setExpressionEvaluator(new ExpressionEvaluator($language)) 
    ->build(); 

그런 다음이 배제 전략을 사용하여 직렬화 할 수 있어야한다 내가 확신 할 수없는 것은 register 호출 (컴파일러 용)에 빈 호출 가능을 전달하고 있으며 스핀을주고 유효하다는 것을 확인할 수있는 방법이 없습니다.

희망이 도움이 ...