Symfony Controller - 如何返回XML响应?

2022-08-30 16:57:43

我想在我的XML响应中返回:RandomController::indexAction()

return new Response($this->renderView(
    'AcmeRandomBundle:Random:index.xml.twig',
    array(
        'randomParameter' => $randomParameter
    )
));

其中是这样的:index.xml.twig

<?xml version="1.0" encoding="UTF-8"?>
<randomTag>
    {{ randomParameter }}
</randomTag>

当我想在firefox中打开这个动作时,我进入了firebug:

<html>
   <body>
    <randomTag>
        randomValue
    </randomTag>
   </body>
</html>

如何返回正确的XML响应?


答案 1

尝试在响应对象上添加正确的标头,如下所示:

$response->headers->set('Content-Type', 'text/xml');

否则,在 Controller 方法上添加正确的注释 (),如以下示例所示:defaults

 /**
  * @Route("/hello/{name}", defaults={"_format"="xml"}, name="_demo_hello")
  * @Template()
  */
  public function helloAction($name)
  {
     return array('name' => $name);
  }

查看指南以获取进一步的解释


答案 2

如果要返回许多 XmlResponse,请考虑创建自己的响应对象:

<?php

namespace App\Component\HttpFoundation;

use Symfony\Component\HttpFoundation\Response;

class XmlResponse extends Response
{
    public function __construct(?string $content = '', int $status = 200, array $headers = [])
    {
        parent::__construct($content, $status, array_merge($headers, [
            'Content-Type' => 'text/xml',
        ]));
    }
}

然后,您可以返回控制器。new XmlResponse($xmlBody);


推荐