在同一个函数上分别应用多个 JMS 序列化组

Apply separately many JMS serialization groups on the same function

我正在寻找具有 jms_serliazer 的功能。
好的,让我解释一下,假设我们有一个函数 getArticlesAction(),和一个名为 groupquery param,它将代表 组序列化名称 .

所以,在得到序列化组的名称$paramFetcher->get ('group')之后,是否可以应用serliazer组,eather group1group2,基于该查询参数已经恢复?

这是我的例子:

/**
 * @FOSRest\QueryParam(name="group")
 */
public function getArticlesAction(ParamFetcherInterface $paramFetcher)
{
    $groupName = $paramFetcher->get('group');

    //yourlogic
}

这是我在 Entity.Article.yml 下配置的一部分,它负责序列化的方式。

ArticleBundle\Entity\Article:
    properties:
        id:
            expose: true
            groups: [group1, group2]
        name:
            expose: true
            serialized_name: name
            groups: [group1]
        label:
            expose: true
            serialized_name: label
            groups: [group2]

在我的示例中,如果我们应用 group1,我们将获得具有 (id, name) 键的对象集合,并且如果我们应用 group2,那么我们将获得具有 (id, label) 键的对象集合。

如果您让群组通过参数进入,假设验证它是一个有效的群组名称,您可以这样做:

在class的使用部分,添加:

use JMS\Serializer\SerializationContext;
use Symfony\Component\HttpFoundation\Response;

那么方法就是:

/**
* @FOSRest\QueryParam(name="group")
*/
public function getArticlesAction(ParamFetcherInterface $paramFetcher)
{
    $groupName = $paramFetcher->get('group');

    //snip - get the repo here
    $article = $articleRepo->find($articleId);
    $response = $this->get('serializer')->serialize($article, 'json', SerializationContext::create()->setGroups([$groupName]));

    return new Response($response, 200, ['Content-Type' => 'application/json']);
}