簡體   English   中英

Symfony 3序列化器問題

[英]Symfony 3 serializer problems

您好,我正在Symfony 3.1上創建API REST。

我有一個序列化和對象問題。

這些是它返回給我的錯誤。

A circular reference has been detected (configured limit: 1).

我讀過的堆棧溢出鏈接沒有任何結果。

這些是我閱讀的文檔,可嘗試使我的對象受益匪淺。

以下是填補$ employees的代碼:

$em = $this->getDoctrine()->getManager();
$dql = " SELECT e FROM BackendBundle:Employees e 
         INNER JOIN BackendBundle:Companies c 
         WITH e.idCompany = c.idCompany 
         WHERE c.idUser = ?1";                
$query = $em->createQuery($dql);
$query->setParameter(1,$user);
$employees = $query->getResult();

我嘗試了這些東西:

  1. 第一個證明

      use Symfony\\Component\\Serializer\\Serializer; use Symfony\\Component\\Serializer\\Encoder\\XmlEncoder; use Symfony\\Component\\Serializer\\Encoder\\JsonEncoder; use Symfony\\Component\\Serializer\\Normalizer\\ObjectNormalizer; $encoders = array(new XmlEncoder(), new JsonEncoder()); $normalizers = array(new ObjectNormalizer()); $serializer = new Serializer($normalizers,$encoders); $data = $serializer->serialize($employees, 'json'); 
  2. 第二證明

在這些證明中,我默認在Symfony 3 Serialzer上讀取的是deseabe。 為此,我修改了這些文件:

app / config / config.yml

framework:
#esi:             ~
#translator:      { fallbacks: ["%locale%"] }
secret:          "%secret%"
router:
    resource: "%kernel.root_dir%/config/routing.yml"
    strict_requirements: ~
form:            ~
csrf_protection: ~
validation:      { enable_annotations: true }
#serializer:      { enable_annotations: true }
templating:
    engines: ['twig']
default_locale:  "%locale%"
trusted_hosts:   ~
trusted_proxies: ~
session:
    # http://symfony.com/doc/current/reference/configuration/framework.html#handler-id
    handler_id:  session.handler.native_file
    save_path:   "%kernel.root_dir%/../var/sessions/%kernel.environment%"
fragments:       ~
http_method_override: true
assets: ~
serializer:
    enabled: true
    enable_annotations: true

唯一重要的是我激活串行器的最后幾行。

app / config / servces.yml

services:    
get_set_method_normalizer:
    class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
    public: false
    tags:
        - { name: serializer.normalizer }

src / AppBundle / Controller / DefaultController.php

<?php
$serializer = $this->get('serializer');
$json = $serializer->serialize($employees,'json');

還有一點證明,您正在閱讀的書與書之間沒有太大區別。

請問是否有人知道如何在Symfony 3上序列化對象。我一整天都在嘗試使用同一錯誤進行嘗試。

A circular reference has been detected (configured limit: 1).

您的問題是序列化員工正在序列化他們的公司,這又是對員工的引用,這是一個完美的循環引用。

您可以在Symfony的序列化器中處理這些循環引用,例如,通過捕獲CircularReferenceException或通過在setCircularReferenceHandler中使用自定義可調用對象,並僅序列化不引用原始實體的屬性。

有關詳細說明,請參見Symfony的文檔

$normalizers->setCircularReferenceHandler(function ($object) {
        return $object->getId();
    });

在創建ObjectNormalizer()實例后添加此兄弟。 它對我來說很完美!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM