Symfony 2:防止在xml响应中显示标题

时间:2016-06-22 10:56:36

标签: php xml symfony

所以我正在尝试使用symfony创建一个xml文档。生成没有问题,我以下列方式返回带有名为sitemap.xml.twig的树枝模板的文档:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    {% for slug in slugArray %}
    <url>
        <loc>{{ slug }}</loc>
        <lastmod>{{ curDate }}</lastmod>
        <changefreq>monthly</changefreq>
        <priority>0.5</priority>
    </url>
    {% endfor %}
</urlset>

在控制器中,我用:

调用模板
    $response = new Response($this->render(
        'MyBundle:Sitemap:sitemap.xml.twig',
        [
            'slugArray' => $slugArray,
            'curDate' => $curDate
        ]
    ));

    $response->headers->set('Content-Type', 'application/xml; charset=utf-8');

    return $response;

$slugArray包含大约1000个有效的链接,而$curDate包含date('Y-m-d', time())的值。

但是,当我尝试访问站点地图时,出现以下错误:

XML-Verarbeitungsfehler: nicht wohlgeformt
Adresse: http://localhost:8888/myWebsite/sitemap.xml
Zeile Nr. 1, Spalte 5:

HTTP/1.0 200 OK
----^

这基本上意味着xml文档格式不正确。

因此,出于某种原因,在解析xml时会考虑标头,从而产生错误。 xml本身是完全有效的,当我从firefox中的dev工具复制响应时,保留标题并使用在线验证器检查它们,我没有得到任何错误。

当我删除$response->headers->set('Content-Type', 'application/xml; charset=utf-8');时,我会得到简单的HTML。

那么如何创建一个可以被浏览器解析而没有问题的xml响应呢?

1 个答案:

答案 0 :(得分:0)

如果您使用twig生成xml内容,则在控制器中您已获得响应。 在你的控制器中:

$response = $this->render('....:sitemap.xml.twig', array('urls'=>$urls));
// at this stage $xml is an HttpFoudation Response Object;
// simply set de content type
$response->headers->set('Content-Type', 'xml');
$response->setCharset('utf-8');
return $response;
相关问题