twig json_encode empty json

时间:2015-09-22 08:01:27

标签: json api symfony twig

我收到API中的元素列表。所有元素格式都很好。当我使用树枝倾倒其中一个时,我得到以下内容:

Leg {#2695 ▼
-id: null
#reservation: null
-airportStart: "AIX LES MILLES"
-airplaneType: "Cessna Citation Mustang"
-airportEnd: "ROBINSON"
-startDate: "2015-09-10 20:00:00"
-startHour: "2015-09-10 20:00:00"
-endHour: "2015-09-10 21:00:21"
-durationLeg: "01:21"
#nbPax: "4"
-price: null
-updatedPrice: null
-discountOnLeg: null
-tva: null
-status: null
}

我的用户必须选择其中一个元素,所以我要做的就是使用

将编码的json发送回控制器。
{{ element|json_encode }}

不幸的是,json是空的。当我尝试使用

转储编码的json时
{{ dump(element|json_encode) }}

我得到的只是一个空数组{};

任何想法为什么有另一种方法将所选元素数据发送到控制器函数? (这些元素不会被持久化,API上的每次调用都会返回数千个结果)

1 个答案:

答案 0 :(得分:1)

我来晚了很晚(2年的晚了),但是对于像我一样来自谷歌研究的任何人我说:我也有同样的问题,谷歌搜索后,我&#34 ;解决"我对Serializer Component的问题。怎么样?让我告诉你!

<强>安装

php composer.phar require symfony/serializer

<强>实体

<?php

namespace Your\Namespace\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;

/**
 * Leg
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Your\Namespace\Entity\LegRepository")
 */
class Leg {

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    ...

    public function serializer()
    {
        $encoder    = new JsonEncoder();
        $normalizer = new ObjectNormalizer();

        $normalizer->setIgnoredAttributes(array(
            'whatever', 'attributes', 'you', 'want', 'to', 'ignore'
        ));

        // The setCircularReferenceLimit() method of this normalizer sets the number 
        // of times it will serialize the same object 
        // before considering it a circular reference. Its default value is 1.
        $normalizer->setCircularReferenceHandler(function ($object) {
            return $object->getName();
        });

        $serializer = new Serializer(array($normalizer), array($encoder));
        return $serializer->serialize($this, 'json');
    }
}

Twig

{{ Leg.serializer|raw }}

N.B :这是在symfony 2.6

下测试的