我正在尝试设置不同的组,以根据上下文实现不同类型的实体序列化.
我的配置如下所示:
My\FooBundle\Entity\Asset:
exclusion_policy: ALL
access_type: public_method
properties:
id:
access_type: property
expose: true
groups: [fnord]
name:
expose: true
path:
expose: true
isInQuarantine:
expose: true
groups: [baz]
我希望除非已设置组,否则不应公开具有属性的组.
我试图通过以下方式在我的控制器中设置组:
$view->setSerializationContext(SerializationContext::create()->setGroups(array('fnord')));
然而,对暴露的和不暴露的东西没有影响.即使我不尝试更改SerializationContext,组似乎总是被忽略.
我知道我的配置正在运行,因为我可以通过expose标志切换属性.
但我在这里做错了什么?
最佳答案 我知道这个问题有点陈旧,但它可能对其他人有所帮助.
我遇到了类似的问题.
这是因为我在我的控制器(扩展FOSRestControler)中有一个多次调用的方法
$this->getView()
您必须注意此方法创建一个新的View对象.
这意味着,如果调用多个getView方法,则会重置上下文.
看看以下适用于我的应用的代码:
use FOS\RestBundle\Controller\FOSRestController as Controller;
class RestController extends Controller
{
public function getUserAction($username)
{
$view = $this->view();
$view->setSerializationContext(SerializationContext::create()->setGroups(array('Product')));
$user = $this->getDoctrine()->getManager()->getRepository('VendorUserBundle:User')->findOneByUsername($username);
if(!is_object($user))
{
throw $this->createNotFoundException();
}
$view->setData($user);
return $view;
}
}
在Model.User.yml文件中:
FOS\UserBundle\Model\User:
exclusion_policy: ALL
properties:
username:
expose: true
groups: [fnord]
email:
expose: true
groups: [Product]
enabled:
expose: true
groups: [Product]
roles:
expose: true
groups: [Product]
给出以下输出:
{"email":"guiguiboy@xxx.com","enabled":true,"roles":["ROLE_XXX"]}
我没有任何缓存相关的问题(dev env used).