2017-12-15 8 views
0

symfonyプロジェクトでJMSシリアライザを使用していますが、「Exlude condition」に関する質問があります。エンティティの1つのプロパティが1つを除くすべてのルート(メソッド)に対して除外されることを指定することは可能ですか? が、私はこのような何か意味:この可能であればJMSシリアライザExclude conditionの使い方は?

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

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

次にあなたがこの除外戦略使ってシリアライズすることができるはずです。

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

1を私は確信しているのは、registerコール(コンパイラ用)に空の呼び出し可能コードを渡しており、私はそれにスピンを与え、それが有効であることを確認する手段がありません。

希望します。

関連する問題