[英]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);
}
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.