Symfony 3序列化器问题 - javascript

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

我有一个序列化和对象问题。

这些是它返回给我的错误。

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

我读过的堆栈溢出链接没有任何结果。

Converting a Symfony2 PHP entity object for use within Javascript
A circular reference has been detected (configured limit: 1) Serializer

这些是我阅读的文档,可尝试使我的对象受益匪浅。

Symfony how to use Serializer
Symfony Serializaer Component

以下是填补$ 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();

我尝试了这些东西:

第一个证明

 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');

第二证明

在这些证明中,我默认在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中的custom callable并仅序列化未引用原始实体的属性。

有关详细说明,请参见Symfony's documentation。

PHP json_encode数组到javascript关联数组 - javascript

我有一些从PHP中读取的mysqli列。它正在完美地获取和回显。$results = mysqli_fetch_assoc(mysqli_query($conn, $querystring)); echo json_encode($results); //$results = {"title":"Sea Shells"…

PHP-显示特殊字符 - javascript

允许用户输入的代码段//fetch user input and pass it in URL alertify.prompt("Please enter note/remarks for this Form (optional):", function (e,value) { if (e) { alertify.success(…

Symfony 2:如何通过路由名称获取默认路由? - php

是否可以通过名称检索有关某条路线的信息,或获取所有路线的列表?我需要能够获取任意路径的_controller中的defaults值,而不仅仅是当前路径。这有可能吗?P.S .:我发现我可以找到使用YAML的路由,但是重新解析似乎是不必要且繁重的。 参考方案 我真的很擅长回答自己的问题。要获取路由,请在路由器上(控制器内的getRouteCollection(…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

验证php中的javascript对象 - php

在我的用户界面中,用户可以构建一些javascript对象,例如:var box = { "width": "100px", "height": "200px", "click": function () { alert("You clicked t…