我收到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上的每次调用都会返回数千个结果)
答案 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
下测试的