2017-08-28 7 views
0

Ich bin auf der Suche nach einer Möglichkeit, Felder dynamisch einzuschließen, wenn JSON-Daten über JMS-Serializer ausgegeben werden. Und ich fand den Beitrag hier: https://jolicode.com/blog/how-to-implement-your-own-fields-inclusion-rules-with-jms-serializerFelder Einschlussregeln in JMS Serializer

Die Lösung hier ist für das Einschließen/Ausschließen aktueller Felder der aktuellen Entität. Aber ich möchte auch die Definition der Unterentitätsfelder, wenn die Entität Eins-zu-viele-Beziehungen hat. Zum Beispiel:

class User 
{ 
    private $name; 
    private $age; 

    /**@Type("array<Book>")**/ 
    var $books = []; 
} 

class Book 
{ 
    private $title; 
    private $pages; 
    private $content; 
} 

Damit ich ein Array an die FieldsListExclusionStrategy geben sie hier die Daten, um herauszufinden:

$fields = [ 
    'User' => ['name'], 
    'Book' => ['title'], 
]; 

Aber nicht nur id und title für aktuelle Einheit. Weiß jemand wie?

Antwort

0

Em ... Schließlich habe ich den Code (ähnlich wie die Post):

class FieldsListExclusionStrategy implements \JMS\Serializer\Exclusion\ExclusionStrategyInterface 
{ 
    private $fields = []; 

    public function __construct(array $fields = []) 
    { 
     $this->fields = $fields; 
    } 

    public function shouldSkipClass(\JMS\Serializer\Metadata\ClassMetadata $metadata, \JMS\Serializer\Context $context) 
    { 
     return false; 
    } 

    public function shouldSkipProperty(\JMS\Serializer\Metadata\PropertyMetadata $property, \JMS\Serializer\Context $context) 
    { 
     $class = $property->class; 
     if (!isset($this->fields[$class])) return false; 

     $fields = $this->fields[$class]; 
     $name = $property->serializedName ?: $property->name; 
     return !in_array($name, $fields); 
    } 
} 
Verwandte Themen