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;
}
我已经像这样创建了一个 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;
}