gpt4 book ai didi

symfony - 如何让组为 JMSSerializerBundle 和 FOSRestBundle 工作?

转载 作者:行者123 更新时间:2023-12-01 03:52:05 24 4
gpt4 key购买 nike

我正在尝试设置不同的组,以根据上下文实现不同类型的实体序列化。

我的配置是这样的:

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]

我希望除非设置了组,否则不应公开具有属性的组。

我正在尝试通过以下方式在我的 Controller 中设置组:
    $view->setSerializationContext(SerializationContext::create()->setGroups(array('fnord')));

然而,对暴露的和不暴露的没有影响。即使我不尝试更改 SerializationContext , groups选项似乎总是被忽略。

我知道我的配置正在工作,因为我可以通过公开标志切换属性。

然而,我在这里做错了什么?

最佳答案

我知道这个问题有点老,但它可能会帮助其他人。
我遇到了类似的问题。
这是因为我的 Controller (扩展 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"]}

我没有任何与缓存相关的问题(使用了开发环境)。

关于symfony - 如何让组为 JMSSerializerBundle 和 FOSRestBundle 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21413143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com