JMSSerializer — 按条件排除属性

JMSSerializer — Exclude Properties by condition

我已经像这样创建了一个 Symfony3 实体(缩写):

class Group
{
  /**
   * …
   */
  private name;

  /**
   * …
   *@JMS\Exclude()
   */
  private $styles;
}

在路线 [GET] list/groups 上,这很好,因为它应该生成一个列表,其中包含每个项目应该只包含 ID 和名称。

但是在[GET] group/{id}的路上,我想向客户传递更多的细节,包括款式等等。

如何通过 condition/route exclude/include 实体的属性?

更新

多亏了@Genoud Magloire 的回答,我才能够做到这一点:

use FOS\RestBundle\Context\Context;

$view = $this->view($group);
$context = new Context();
$context->addGroup('detail');
$view->setContext($context);

return $this->handleView($view);

您可以使用 @Group 注释作为说明 Here 来创建对象的不同视图。

版本 v1.5 中可用的另一种方法是通过表达式语言排除。

访问 https://github.com/schmittjoh/serializer/pull/673 您可以了解如何使用任何服务调用排除 属性。

基本上是:

class Person
{
    /**
     * @Expose(if="service('some.cool.service').isAllowed(object)")
     */
    public $gender;
    /**
     * @Exclude(if="service('some.cool.service').isAllowed(object)")
     */
    public $gender;
}