Intereting Posts
laravel blade включает ошибку – синтаксическую ошибку, неожиданный Использование метода number_format в Laravel Минимизировать базу данных, чтобы экспортировать все продукты Magento MySQL извлекает открытый текст из html-данных или PHP? Создание таблицы из PHP не выполняется Неопределенная ошибка переменной в моем скрипте PHP iOS MDM push-уведомление с использованием Php, не работает Что означает этот синтаксис (page = $ page? $ Page: 'default') в PHP? Два идентичных POST-действия с jquery модальным экраном, один работает, а другой нет? Получение всех изображений из URL-адреса Woocommerce – необходимо отправить электронное письмо по определенному адресу на основе почтового индекса вставить массив в таблицу, используя для цикла PHP SimpleXML: как использовать двоеточие в именах Zend_Validate_Date просто не работает должным образом Как добавить непокрытые файлы в отчет по охвату кода PHPUnit приложения Yii

Синтаксис 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> 

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

Если вам нужна страница для 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 %} 

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

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

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

 $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.... исчезнет