Symfony2 заставляет веточку выводить данные в формате XML

Я использую Symfony2 и пытаюсь использовать веточку для вывода данных в формате XML. Вместо этого, что происходит, веточка просто выбрасывает массивный блок текста в браузер, только если щелкнуть правой кнопкой мыши, чтобы просмотреть исходный код, я вижу хорошо выложенный XML.

Есть ли способ заставить Twig фактически выводить форматированный XML вместо блока текста, не просматривая источник страницы …?

sitemap.xml.twig:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
{% for entry in sitemapresp %}
<loc>{{ entry['url'] }}</loc>
<lastmod>{{ entry['date'] }}</lastmod>
<changefreq>{{ entry['frequency'] }}</changefreq>
<priority>{{ entry['priority'] }}</priority>

{% endfor %}
</url>
</urlset>

Вывод браузера:

http://www.sitemappro.com/2015-01-27T23:55:42+01:00daily0.5http://www.sitemappro.com/download.html2015-01-26T17:24:27+01:00daily0.5

Исходный вид вывода:

    <?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.90">
<url>
<loc>http://www.sitemappro.com/</loc>
<lastmod>2015-01-27T23:55:42+01:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>http://www.sitemappro.com/download.html</loc>
<lastmod>2015-01-26T17:24:27+01:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>
</urlset>

Какие-либо предложения..?

5

Решение

Если вам нужно, чтобы страница была в формате XML, вам необходимо установить тип содержимого ответа.

$response = new Response($this->render('sitemap.xml.twig'));
$response->headers->set('Content-Type', 'application/xml; charset=utf-8');
return $response;

Если вы хотите, чтобы только часть страницы отображала код на HTML-странице, используйте:

{% autoescape %}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
{% for entry in sitemapresp %}
<loc>{{ entry['url'] }}</loc>
<lastmod>{{ entry['date'] }}</lastmod>
<changefreq>{{ entry['frequency'] }}</changefreq>
<priority>{{ entry['priority'] }}</priority>

{% endfor %}
</url>
</urlset>
{% endautoescape %}
10

Другие решения

Сторона контроллера:

$response = new Response();
$response->headers->set('Content-Type', 'xml');
return $this->render(
'Bundle:Controller:sitemap.xml.twig',
array(
'param1' => $param1,// ...
),
$response
);
7

Вы должны сделать только представление, чтобы отправить его в ответ.

$response = new Response($this->renderView('sitemap.xml.twig'));
$response->headers->set('Content-Type', 'application/xml; charset=utf-8');
return $response;

Так замени $this->render(...) с $this->renderView(...)

HTTP/1.0 200 OK Cache-Control: no-cache.... исчезнет

1
По вопросам рекламы [email protected]