Symfony JMS序列化器在需要时启用

时间:2018-07-27 10:22:40

标签: php symfony jmsserializerbundle

我有jms序列化程序,并且在我的类实体中有注释。我只有在某些情况下需要应用jms序列化程序注释的情况。这该怎么做 ?首先,我认为可能需要将注释从实体类移动到uml,并创建一些处理程序,在此我可以对此实体启用此注释,其余时间jms不适用于实体

我的实体

/**
 * @Annotation\ExclusionPolicy("all")
 */
class Application implements ContainsRecordedMessages
{
/**
 * @var int
 *
 * @Annotation\Groups({
 *      "get_application"
 * })
 * @Annotation\Expose()
 */
private $id;

/**
 * @var int
 *
 * @Annotation\Groups({
 *      "post_application"
 * })
 * @Annotation\SerializedName("company_id")
 * @Annotation\Expose()
 */
private $companyId;

/**
 * @var string
 *
 * @Annotation\Groups({
 *      "post_application"
 * })
 * @Annotation\SerializedName("channel_sale")
 * @Annotation\Expose()
 */
private $channelSale;

,并且我有这个实体的类管理器,我想在其中启用jms和禁用jms序列化程序注释

class ApplicationManager
{
public function someFunction()
{
    $this->enableJmsForEntity(Application::class);
    //some logic
    //
    $this->disableJmsForEntity(Application::class);     
}
}

我的目标-jms序列化程序在序列化程序进程中不起作用以进行响应。仅在我的服务中,我使用deserializer函数,用于实体启用的jms序列化程序注释创建实体。因为在这个旧项目中,所有响应都是这样

return $this->json($application, Response::HTTP_CREATED);

vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/ControllerTrait.php:114
    protected function json($data, $status = 200, $headers = array(), $context = array())
{
    if ($this->container->has('serializer')) {
        $json = $this->container->get('serializer')->serialize($data, 'json', array_merge(array(
            'json_encode_options' => JsonResponse::DEFAULT_ENCODING_OPTIONS,
        ), $context));

        return new JsonResponse($json, $status, $headers, true);
    }

    return new JsonResponse($data, $status, $headers);
}

在添加了jms注释后,我们遇到了问题,即更改..

0 个答案:

没有答案