Search code examples
restsymfonyfosrestbundlejms-serializer

How to dynamically change serialized groups in symfony jms fosrestbundle?


Hello I'd like to dynamically change the groups of my serialization context.

The code :

/**
 * @Rest\Get("", name="bap_api_space_query")
 * @Rest\View(serializerGroups={"Default", "space_dashboard", "dashboard_resource"})
 *
 * @ApiDoc(resource=true,description="List all spaces this user has access to")
 */
public function queryAction(Request $request)
{
    $user = $this->getUser()->reload();
    $organization = $user->getOrganization();

    // depending the request, remove or add serialized group
    // for example $view->setSerializationGroups('dashboard');

    return $organization->getSpaces();
}

As commented in the code, i'd like to remove or add group in the controller . Is there a way to do it ?


Solution

  • The solution is pretty easy after 5hours of research :

    public function queryAction(Request $request)
    {
    
        $user = $this->getUser()->reload();
        $organization = $user->getOrganization();
    
        // filter spaces where org has an active contract
    
        $context = new Context();
        $context->setGroups(array('Default'));
        $spaces = $organization->getSpaces();
        $view = $this->view($spaces, 200);
        $view->setContext($context);
    
    
        return $this->handleView($view);
    }