2017-08-28 62 views
0

我正在尋找一種方式來動態包含字段時通過JMS串行輸出JSON數據。而且我發現後在這裏:https://jolicode.com/blog/how-to-implement-your-own-fields-inclusion-rules-with-jms-serializer在JMS串行字段包含規則

的這裏的解決方案是,包括/排除當前實體的電流場。但我也想子實體字段定義當實體有一個一對多的關係。例如:

class User 
{ 
    private $name; 
    private $age; 

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

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

所以,我可以傳遞一個數組到FieldsListExclusionStrategy在這裏找出它的數據:

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

但不只是idtitle當前實體。任何人都知道如何呢?

回答

0

EM ......最後,我得到的代碼(類似職位):

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); 
    } 
}