简体   繁体   English

Symfony 控制器 - 如何返回 XML 响应?

[英]Symfony Controller - How to return XML response?

I want to return in my RandomController::indexAction() an XML Response:我想在我的RandomController::indexAction()一个 XML 响应:

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

where index.xml.twig is like that:其中index.xml.twig是这样的:

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

When I want to open this action in firefox, I get in firebug:当我想在 Firefox 中打开此操作时,我进入了 firebug:

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

How to return correct XML response?如何返回正确的 XML 响应?

Try adding correct header on the Response Object like:尝试在响应对象上添加正确的标头,例如:

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

Otherwise add the correct annotation ( defaults ) on your Controller method like this example:否则,在您的 Controller 方法上添加正确的注释( defaults ),如下例所示:

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

Look at the guide for further explaination 查看指南以获得进一步的解释

If you have many XmlResponse to return, consider creating your own Response object:如果您有许多 XmlResponse 要返回,请考虑创建您自己的 Response 对象:

<?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',
        ]));
    }
}

You can then return new XmlResponse($xmlBody);然后你可以返回new XmlResponse($xmlBody); in your controllers.在你的控制器中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM