我创建了一个像这样(缩短)的Symfony3实体:
class Group
{
/**
* …
*/
private name;
/**
* …
*@JMS\Exclude()
*/
private $styles;
}
在路由[GET] list/groups
上,这很好,因为它应该生成一个列表,其中包含每个Item应该只包含id和名称的位置。
但是在路线[GET] group/{id}
上,我想向客户提供更多详细信息,包括样式等。
如何通过条件/路由排除/包含实体的属性?
更新
感谢@Genoud Magloire的回答,我可以这样做:
use FOS\RestBundle\Context\Context;
$view = $this->view($group);
$context = new Context();
$context->addGroup('detail');
$view->setContext($context);
return $this->handleView($view);
答案 0 :(得分:2)
您可以使用@Group
注释作为解释Here来创建对象的不同视图。
答案 1 :(得分:2)
版本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;
}