Slim Framework -> Создать вывод XML

Как я могу создать представление, которое выводит реальный XML-контент для потока RSS. Я использую SLIM, TWIG для создания шаблонов в сочетании с Paris и Idiorm.

Что-то типа :

$app -> get('/rss/', function() use ($app) {
$articles = Model::factory('Article') -> order_by_desc('timestamp') -> find_many();
return $app -> render('rss.xml', array('articles' => $articles));
});

С этим шаблоном layout.xml:

<?xml version="1.0" encoding="UTF-8"?>
{% block content %} {% endblock %}

И этот специальный Шаблон для Route RSS:

{% extends 'layout.xml' %}
{% block content %}     
<blog_content>
{% for article in articles %}
<article>
<article_id>{{ article.id }}</article_id>
<article_headline>{{ article.title }}</article_headline>
<article_author>{{ article.author }}</article_author>
<article_timestamp>{{ article.timestamp }}</article_timestamp>
<article_summary>{{ article.summary }}</article_summary>
<article_link>http://slim.phaziz.com/article/{{ article.id }}/</article_link>
</article>
{% endfor %}
</blog_content>
{% endblock %}

Будет отображаться как HTML-документ, содержащий шаблоны в виде основного текста... Заголовок всегда отправляется как xHTML, а не как XML.

???

Спасибо за помощь!


person Superpupsi    schedule 02.03.2012    source источник


Ответы (1)


Обновление: этот ответ больше не применим к Slim 3.


Вы должны перезаписать Content-Type HTTP-заголовок ответа на text/xml в вашем /rss/ маршруте:

$app -> get('/rss/', function() use ($app) {
  $articles = Model::factory('Article') -> order_by_desc('timestamp') -> find_many();
  
  $app->response->headers->set('Content-Type', 'text/xml')
  
  return $app -> render('rss.xml', array('articles' => $articles));
});

http://docs.slimframework.com/response/headers/

Изменить: если ваш сгенерированный XML на 100 % – RSS, вместо этого используйте тип контента application/rss+xml.

person Epoc    schedule 24.09.2012