2017-12-15 3 views
0

Ich benutze JMS Serializer in meinem symfony Projekt und ich habe eine Frage über "Exlude Bedingung". Ist es möglich, anzugeben, dass eine Eigenschaft der Entität für alle Routen (Methoden) ausfällt, außer für eine. Ich meine etwas wie folgt aus:JMS-Serializer. Wie verwendet man die Bedingung "Ausschließen"?

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

Wenn dies möglich, was ist die richtige Syntax für das? Danke)

Antwort

0

Um @Exclude Annotation zu verwenden, müssen Sie ein wenig von Symfonys ExpressionLanguage Verständnis haben.

Offensichtlich gehört die in der Annotation verwendete Funktion (z. B. someAction()) nicht zum aktuellen Objekt, sondern zur Expression-Sprachinstanz. Um sich zu registrieren es, gehen Sie wie folgt vor:

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

    // your logic goes here 

    return false; 
}); 

Dann binden Sie es zu Ihrem Serializer:

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

Dann sollten Sie in der Lage sein, mit diesen Ausschluss Strategie zur Serialisierung:

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

Derjenige Sache, die ich unsicher bin, ist leer leer Callable zu register Aufruf (für Compiler) und ich habe keine Mittel, um es eine Drehung geben und bestätigen, dass gültig ist.

Hoffe, das hilft ...

Verwandte Themen