我们有时需要将一个entity集合,转换成json来供ajax使用。这时有一个很好的bundle能够解决这样的问题,当然 Symfony\Component\Serializer\Serializer也可以,但是使用bundle会更加便利。
安装JMSSerializerBundle
1 |
composer require jms/serializer-bundle |
注册bundle
1 2 3 4 5 6 |
// in AppKernel::registerBundles() $bundles = array( // ... new JMS\SerializerBundle\JMSSerializerBundle(), // ... ); |
在controller中写入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/** * @Route("/ajax/list", name="ajax_list") * @Method("GET") */ public function ajaxlistAction(Request $request) { $em = $this->getDoctrine()->getManager(); $dnrientitys = $em->getRepository('AppBundle:Category')->find(1)->getDnri(); //将entities转化为json $serializer=$this->get('serializer'); $newdata=$serializer->serialize($dnrientitys,'json'); $response= new Response($newdata); return $response; |
你可以访问,这个controller看看是否输出了JSON没有问题,但是当你使用中文时你会发现一个经常遇到的问题json的unicode中文编码问题。
通常我们要在json_encode($data,JSON_UNESCAPED_UNICODE) 来防止编码问题的出现。但在serializer中我们不能这样做,我们只需要配置一下即可:
打开config.yml
1 2 3 4 |
jms_serializer: visitors: json: options: [JSON_UNESCAPED_UNICODE] |
ok! 手工。